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

How can i use operators `new` and `delete` within shared memory?

本文关键字:运算符 delete new 共享 内存      更新时间:2023-10-16

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

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

因为内存已经分配,所以你想使用放置 new

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

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

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

ptr->MyClass::~MyClass();

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

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

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