如何在共享内存中使用运算符`new`和`delete`?

时间:2012-05-09 15:05:59

标签: c++ memory-management shared-memory

我想使用共享内存在多​​个程序之间共享一些对象。

我在this site找到了例子。它没有任何对象分配,只是直接寻址,但我想在共享内存中创建结构或类。

2 个答案:

答案 0 :(得分:10)

由于已经分配了内存,因此您希望使用展示位置

void * ptr = shmat(shmid, 0, 0);
// Handle errors
MyClass * x = new (ptr) MyClass;

然后,MyClass的新实例将在ptr指向的内存中构建。

当不需要该对象时,您必须手动调用析构函数(不释放内存)。

ptr->MyClass::~MyClass();

答案 1 :(得分:6)

可以使用placement new:

在任何合适的对齐存储中创建对象
void* storage = get_aligned_shared_memory();
T* object = new (storage) T();

那就是说 - 你考虑过使用像Boost.Interprocess这样的库吗?