Как выделить для последующего размещения новое "как по новому"C++

Программы на C++. Форум разработчиков
Anonymous
 Как выделить для последующего размещения новое "как по новому"

Сообщение Anonymous »

Нам необходимо разделить выделение и инициализацию некоторой кучи. К сожалению, клиентский код использует delete p; для удаления указателя. Если бы у нас был контроль над удалением, мы могли бы выделить место с помощью ::operator new (sizeof(T), std::align_val_t(alignof(T))), а затем использовать размещение new и соответствующий глобальный ::оператор удаления. Но (если я правильно понимаю) delete может вызвать T::operator delete, потенциально требуя выделения, полученного из T::operator new, со сложным порядком предпочтений между различными возможными аргументы для T::operator new и T::operator delete, если имеется несколько перегрузок.
Есть ли что-то вроде std::allocate_as_if_by_new( ), который выполнит точно такое же распределение, как и new T(...), но без инициализации или, по крайней мере, гарантирует, что (после инициализации) удалит p; правильно освободит это?

Подробнее здесь: https://stackoverflow.com/questions/790 ... -if-by-new

Вернуться в «C++»