在特定的内存地址创建新的C ++对象?

时间:2009-10-12 14:05:12

标签: c++ memory object pointers location

在C ++中是否可以在特定的内存位置创建新对象?我有一个共享内存块,我想在其中创建一个对象。这可能吗?

4 个答案:

答案 0 :(得分:60)

你想要placement new()。它基本上使用现有内存块调用构造函数,而不是从堆中分配新内存。

编辑:确保您在使用之前了解有关为使用展示位置new()创建的对象明确调用析构函数的说明!

答案 1 :(得分:12)

是。您需要使用operator new()的放置变体。例如:

void *pData = ....; // memory segment having enough space to store A object
A *pA = new (pData) A;

请注意,展示位置不会引发异常。

答案 2 :(得分:1)

如果要分配大量细粒度对象,最好的方法是将placement new与某种环形缓冲区结合使用。否则,除了对象指针本身之外,你必须跟踪指针。

答案 3 :(得分:0)

在Windows上,MapViewOfFileExVirtualAllocEx允许指定首选虚拟地址。但不保证。