这是一个简短的问题:
使用C++,如何在已经分配的内存区域上调用构造函数?
您可以使用placement new构造函数,它接受一个地址.
Foo* foo = new (your_memory_address_here) Foo ();
请查看C++ FAQ lite或MSDN中的更详细说明.你需要确保内存正确对齐的唯一方法(malloc
应该返回正确对齐任何内存的内存,但要注意SSE之类的东西,可能需要对齐到16字节边界左右).
请注意,在调用placement之前new
,您需要在内存上调用析构函数 - 至少如果该对象具有非平凡的析构函数或包含具有的成员.
对于obj
类Foo
的对象指针,可以显式调用析构函数,如下所示:
obj->~Foo();