我有一个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。

09-06 00:03