7

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

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

4

2 回答 2

11

因为已经分配了内存,所以您要使用Placement new

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

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

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

ptr->MyClass::~MyClass();
于 2012-05-09T15:11:01.860 回答
7

可以使用placement new 在任何合适的对齐存储中创建对象:

void* storage = get_aligned_shared_memory();
T* object = new (storage) T();

也就是说——您是否考虑过为此使用诸如Boost.Interprocess之类的库。

于 2012-05-09T15:10:21.417 回答