加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 为什么boost :: interprocess :: managed_shared_ptr为非co

发布时间:2020-12-16 07:01:40 所属栏目:百科 来源:网络整理
导读:据我所知,以下内容对boost :: shared_ptr有效: boost::shared_ptrSomeData ptr;...boost::shared_ptrconst SomeData c_ptr = ptr; // Valid 对于boost :: interprocess :: managed_shared_ptr,相同的行为不适用.为什么? 解决方法 boost :: interprocess ::
据我所知,以下内容对boost :: shared_ptr有效:

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

对于boost :: interprocess :: managed_shared_ptr,相同的行为不适用.为什么?

解决方法

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

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

And the creation of a shared pointer can be simplified to this:

[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之外什么都不做,所以它们不会转换.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读