在C ++中是否可以在特定的内存位置创建新对象?我有一个共享内存块,我想在其中创建一个对象。这可能吗?
答案 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上,MapViewOfFileEx和VirtualAllocEx允许指定首选虚拟地址。但不保证。