我有一个A
类。我正在使用的某些库为我分配给定的内存量sizeof A,并返回指向它的void指针。
A* pObj = (A*) some_allocator_im_forced_to_use( sizeof A );
现在如何在刚刚分配的内存中创建
A
的新实例? 我已经尝试过:
*pObj = A();
但这是行不通的-析构函数在A的构造函数之后被调用。
最佳答案
您可以使用新的展示位置:
A* pObj = new ( some_allocator_im_forced_to_use( sizeof( A ) ) ) A;
这将在函数
A
返回的位置构造一个新的some_allocator_im_forced_to_use
实例。该函数需要返回一个void*
,该A
指向所讨论的实现中针对delete pObj
对象适当对齐的足够内存。您可能必须手动为此对象调用析构函数,因为您将无法使用常规的
shared_ptr
销毁它。pObj->~A();
// Call custom allocator's corresponding deallocation function on (void*)pObj
为了正确销毁对象并释放内存,您可以考虑使用带有自定义删除器的ojit_code。