获取有关boost进程的managed_shared_memory的指针

时间:2015-04-24 10:14:05

标签: c++ boost boost-interprocess

在boost进程的所有示例中,我只看到它在main()中初始化。

#include <boost/interprocess/managed_shared_memory.hpp>
#include <iostream>

using namespace boost::interprocess;

int main()
{
  shared_memory_object::remove("Boost");
  managed_shared_memory managed_shm(open_or_create, "Boost", 1024);
  int *i = managed_shm.construct<int>("Integer")(99);
  std::cout << *i << '\n';
  std::pair<int*, std::size_t> p = managed_shm.find<int>("Integer");
  if (p.first)
    std::cout << *p.first << '\n';
}

而不是具体的提升问题,这更像是一个C ++问题,我知道我可以创建一个对象并使用初始化列表初始化managed_shm,但我想知道是否有办法声明它比如managed_shared_memory * managed_shm;,然后像managed_shm = new managed_shm(open_or_create, "Boost", 1024);一样初始化它?

我看过managed_shared_memory标题,他们似乎没有提供任何选项。

1 个答案:

答案 0 :(得分:2)

是的,确定。就这样写吧。

#include <boost/interprocess/managed_shared_memory.hpp>
#include <iostream>

namespace bip = boost::interprocess;

struct MyWorker : boost::noncopyable {
    MyWorker() 
        : _shm(new bip::managed_shared_memory(bip::open_or_create, "089f8a0f-956a-441d-9b9e-e0696c43185f", 10ul<<20)) 
    {}

    ~MyWorker() {
        delete _shm;
    }
  private:
    bip::managed_shared_memory* _shm;
};

int main() {
    MyWorker instance;
}

Live On Coliru 使用managed_mapped_file代替共享内存(Coliru不支持)

当然,更喜欢智能指针。

或者确实,问问自己为什么需要动态分配(我想不出有效的理由)

我使用的某种API(错误地!)需要一个指针,只需要取地址:

bip::managed_shared_memory shm(bip::open_or_create, "SHM_NAME", 10ul<<20);

// calling a badly design API takes a pointer:
misguided_api_foo(&shm);