Войти
ФлеймФорумПрограммирование

Общие вопросы по программированию (506 стр)

Страницы: 1505 506 507 508559 Следующая »
#7575
11:09, 29 сен 2022

Еще вопрос - std::malloc и глобальный operator new это одно и то же?
Т.е. если я сделаю так, это будет законно?

void* mem = std::malloc(100);
::operator delete (mem);
#7576
11:21, 29 сен 2022

kkolyan
> впрочем, delete вроде безопасен даже на невалидных поинтерах, так что
насколько я помню, delete конкретно для nullptr безопасен, но вовсе не для какого попало указателя.

#7577
11:23, 29 сен 2022

Suslik

The behavior of the standard library implementation of this function is undefined unless ptr is a null pointer or is a pointer previously obtained from the standard library implementation of operator new(size_t) or operator new(size_t, std::nothrow_t).
#7578
11:26, 29 сен 2022

Suslik
> насколько я помню, delete конкретно для nullptr безопасен, но вовсе не для какого попало указателя.
ага. фигню сказанул.

#7579
(Правка: 11:30) 11:30, 29 сен 2022

nes
> Т.е. если я сделаю так, это будет законно?
это 100% UB.
В твоём случае должно быть:

free(mem);

или

new/delete, new[] /delete[]

.

#7580
11:33, 29 сен 2022

nes
> Еще вопрос - std::malloc и глобальный operator new это одно и то же?

Вообще не одно и то же, но второе нередко под капотом вызывает первое, но это детали реализации.

> Т.е. если я сделаю так, это будет законно?

Прокатить даже может, но нет, незаконно.

#7581
(Правка: 16:08) 16:08, 29 сен 2022

У меня ещё вон что из мной написанного нашлось.

+ Показать
#7582
16:13, 29 сен 2022

Алексей Патрашов
А в чём вопрос?

#7583
16:14, 29 сен 2022

Имбирная Ведьмочка
> А в чём вопрос?
В том, как оно умудряется работать при том, что я не помню, как это написал.

#7584
16:19, 29 сен 2022

Алексей Патрашов
> В том, как оно умудряется работать при том, что я не помню, как это написал.
А как ты определил что оно работает?

#7585
16:28, 29 сен 2022

clifganger
> А как ты определил что оно работает?
Скомпилировал и запустил: оно рисует случайно расположенные точки не ближе заданного расстояния между ними.

#7586
(Правка: 23:40) 21:49, 29 сен 2022

nes
> Т.е. если я сделаю так, это будет законно?
> void* mem = std::malloc(100);
> ::operator delete (mem);
  В общем случае нет, конечно же. По твоему new/delete это какая-то шутка?

#7587
22:27, 29 сен 2022

Zefick
Я предполагал что это аналоги.

#7588
(Правка: 23:11) 23:10, 29 сен 2022

Dmitry_Milk
> Может быть можно придумать какое-нибудь еще красивое решение?
Как вариант можно подумать над обёрткой над std::make_unique, которая будет инкрементировать счётчик при удачном создании и вешать кастомный делитер на уникальный указатель, который будет декрементировать счётчик.

#7589
23:45, 29 сен 2022

Went
> кастомный делитер на уникальный указатель

Это все равно под капотом аналог некоторого виртуального метода, то есть все равно сохранение дополнительной инфы в объекте.

Мне тут пришла мысль - все-таки я наверное откажусь от RAII для этого счетчика, а просто у рекурсивных виртуальных методов парсинга сделаю возвращаемое значение не void а int, обозначающее количество всех дочерних элементов, посчитав его как сумму возвратов от всех рекурсивных вызовов парсеров дочерних элементов - так это значение станет просто локальным, гарантированно начиная с нуля при открытии очередной первой скобки.

Страницы: 1505 506 507 508559 Следующая »
ФлеймФорумПрограммирование