【问题标题】:Why boost::interprocess::managed_shared_ptr to non-const can not be converted to managed_shared_ptr to const为什么 boost::interprocess::managed_shared_ptr to non-const 不能转换为 managed_shared_ptr to const
【发布时间】:2012-10-11 21:18:41
【问题描述】:

据我了解,以下内容对 boost::shared_ptr 有效:

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

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

【问题讨论】:

    标签: c++ boost interprocess


    【解决方案1】:

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

    typedef managed_shared_ptr&lt;MyType, managed_shared_memory&gt;::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,除了生成 3 个 typedef 之外什么都不做,所以它们不会转换。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-12
      • 2019-09-03
      • 1970-01-01
      相关资源
      最近更新 更多