我们需要将一些堆存储的分配和初始化分开。不幸的是,客户端代码使用delete p;
来删除指针。如果我们可以控制删除,我们可以使用 进行分配::operator new (sizeof(T), std::align_val_t(alignof(T)))
,然后使用放置new
和相应的全局::operator delete
。但是(如果我理解正确的话)delete
可能会调用T::operator delete
,可能需要来自 的分配T::operator new
,并且 的不同可能参数之间的优先顺序很复杂T::operator new
,T::operator delete
如果有多个重载的话。
是否有类似的东西std::allocate_as_if_by_new<T>()
可以执行完全相同的分配new T(...)
,但无需初始化,或者至少保证(初始化后)delete p;
将正确地释放它?