C++:将类实例存储在已分配的内存中

Sog*_*ogu 3 c++ malloc pointers

我上课了A.我正在使用的一些库为我分配给定量的内存,sizeof A,并返回一个指向它的void指针.

A* pObj = (A*) some_allocator_im_forced_to_use( sizeof A );
Run Code Online (Sandbox Code Playgroud)

现在我如何A在刚刚分配的内存中创建一个新实例?

我尝试过:

*pObj = A();
Run Code Online (Sandbox Code Playgroud)

但这不起作用 - 析构函数在A的构造函数之后被调用.

CB *_*ley 8

您可以使用新的展示位置:

A* pObj = new ( some_allocator_im_forced_to_use( sizeof( A ) ) ) A;
Run Code Online (Sandbox Code Playgroud)

A将在函数返回的位置构造一个新实例some_allocator_im_forced_to_use.此函数需要返回void*指向适当的内存,以便为所A讨论的实现上的对象进行适当的对齐.

您可能需要手动为此对象手动调用析构函数,因为您将无法使用通常的方法delete pObj来销毁它.

pObj->~A();
// Call custom allocator's corresponding deallocation function on (void*)pObj
Run Code Online (Sandbox Code Playgroud)

为了正确销毁对象并释放内存,您可以考虑使用shared_ptr自定义删除器.