boost shared_ptr 在更改底层对象时进行复制?

Posted

技术标签:

【中文标题】boost shared_ptr 在更改底层对象时进行复制?【英文标题】:boost shared ptr makes copy when changing undelying object? 【发布时间】:2014-04-24 11:57:24 【问题描述】:

boost::shared_ptr<int> ptr 是否会在

时进行复制
*ptr.get() = 5;

假设refcount3,在上面的行之后它会保持3 吗?或者会发生什么?会分配新的object吗?

【问题讨论】:

【参考方案1】:

不,它不会复制,因为那样对象将不再被共享。

另外,无需显式调用get()

*ptr = 5;

这对引用计数没有影响。

(创建新的共享对象:ptr = boost::make_shared<int>(5)

【讨论】:

所以我可以在不影响引用计数的情况下更改底层对象的值?只是所有指向boost::shared_ptr<int> ptr 的对象仍将指向boost::shared_ptr<int> ptr,只是它持有的值会有所不同,对吧? 是的,@Oleksandra,我的回答不会改变。就其价值而言,在这方面它与常规指针 (int*) 完全相同。

以上是关于boost shared_ptr 在更改底层对象时进行复制?的主要内容,如果未能解决你的问题,请参考以下文章

将派生类型的对象从 python 传递到 C++ 函数时会出现 Boost Python 运行时错误,该函数期望将 shared_ptr 传递给基类型

boost::shared_ptr与定制删除器

基类中 boost::shared_ptr 指向的对象永远不会被破坏

类结束时的 boost::shared_ptr 错误

smart_ptr之shared_ptr

当类对象为 const 时,使类中的 shared_ptr 无法更改它指向的对象