执行lock()

时间:2017-07-26 13:17:13

标签: c++ boost weak-ptr

根据提升:

  

要访问该对象,可以使用shared_ptr构造函数或成员函数锁将weak_ptr转换为shared_ptr。

再次,来自boost:

shared_ptr<T> lock() const;

//Returns: expired()? shared_ptr<T>(): shared_ptr<T>(*this).

据我了解,返回shared_ptr<T>(*this)意味着创建一个引用计数为1的新shared_ptr;这绝对不是我们想要的。所以我可能不理解它。有人解释一下吗?谢谢!

1 个答案:

答案 0 :(得分:3)

不,这实际上是shared_ptr的要点 - 复制的实例将指向相同的基础数据并增加两个实例的引用计数。

这意味着shared_ptr<T>(*this)将创建一个指向相同数据的附加shared_ptr实例,并将增加this和新实例的引用计数。

实际代码实际上更复杂,因为原始的shared_ptr数据是通过weak_ptr实例访问的,但实际上有效的原始shared_ptr数据在最后共享(与在特定shared_ptr对象的所有现有副本中共享引用计数增加。