【问题标题】:How can i use operators `new` and `delete` within shared memory?如何在共享内存中使用运算符“new”和“delete”?
【发布时间】:2012-05-18 03:06:30
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢那个图书馆,这是我一直在寻找的图书馆 :)
    【解决方案2】:

    因为内存已经分配,​​你想使用placement new

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

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

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

    ptr->MyClass::~MyClass();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-04
      • 2020-08-05
      • 2012-08-04
      • 2014-03-26
      • 2011-06-11
      相关资源
      最近更新 更多