为什么boost :: interprocess :: managed_shared_ptr为非const不能转换为managed_shared_ptr为const

时间:2012-10-11 21:18:41

标签: c++ boost interprocess

据我所知,以下内容对boost :: shared_ptr有效:

boost::shared_ptr<SomeData> ptr;
...
boost::shared_ptr<const SomeData> c_ptr = ptr; // Valid

同样的行为不适用于boost::interprocess::managed_shared_ptr。为什么呢?

1 个答案:

答案 0 :(得分:1)

boost::interprocess::managed_shared_ptr实际上不是共享指针;它只是一个帮助类,您可以使用它来定义一个类型。来自interprocess docs

  

typedef managed_shared_ptr<MyType, managed_shared_memory>::type my_shared_ptr;

     

共享指针的创建可以简化为:

     

[C ++]

     

my_shared_ptr sh_ptr = make_managed_shared_ptr (segment.construct<MyType>("object to share")(), segment);

使用上面示例中的“sh_ptr”,以下内容应该有效:

typedef managed_shared_ptr<const MyType, managed_shared_memory>::type my_shared_const_ptr;
my_shared_const_ptr sh_c_ptr = sh_ptr;

因为这两个对象实际上是共享指针。

另一方面,做:

managed_shared_ptr<MyType, managed_shared_memory> ptr;
managed_shared_ptr<const MyType, managed_shared_memory> c_ptr = ptr;

不起作用,因为在这种情况下,ptr和c_ptr是very simple structs除了make 3 typedef之外什么都不做,所以它们不会转换。