C++ lock()的实现

C++ lock()的实现,c++,boost,weak-ptr,C++,Boost,Weak Ptr,据boost称: 要访问该对象,可以使用shared_ptr构造函数或成员函数锁将弱_ptr转换为共享_ptr 同样,来自boost: shared_ptr<T> lock() const; //Returns: expired()? shared_ptr<T>(): shared_ptr<T>(*this). shared_ptr lock()常量; //返回:expired()?shared_ptr():shared_ptr(*this)。 据我所知

据boost称:

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

同样,来自boost:

shared_ptr<T> lock() const;

//Returns: expired()? shared_ptr<T>(): shared_ptr<T>(*this).
shared_ptr lock()常量;
//返回:expired()?shared_ptr():shared_ptr(*this)。

据我所知,返回
shared_ptr(*this)
意味着创建一个引用计数为1的新共享_ptr;这绝对不是我们想要的。所以我可能不太明白。有人解释一下吗?谢谢

否,这实际上是共享的点\u ptr-复制的实例将指向相同的基础数据,并增加两个实例的引用计数

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



在实际代码中,它实际上更为复杂,因为原始的
共享的ptr
数据是通过
弱的ptr
实例访问的,但实际上原始的
共享的ptr
数据最终是共享的(特定
共享的ptr
对象的所有现有副本中的共享引用计数都增加了).

但是,“Returns:”行中显示的代码不是线程安全的。我猜这就是它的实际实现方式(我的标准注释副本,“原子执行”)。这意味着
模板显式共享\u ptr(弱\u ptr const&r)正在被调用?是的,从技术上讲,原始共享\u ptr实例是通过弱\u ptr访问的,但仍然是(更新了答案以提及这一点)。您所说的“原始共享\u ptr实例被访问”是什么意思?更准确地说,是原始共享数据(请参阅
共享\u计数(弱\u计数常量&r,sp\u nothrow\u标记)
Boost源代码中的实现,实际上它完成了本例中的主要工作)。