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;
假设refcount
是3
,在上面的行之后它会保持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 传递给基类型