1

标准 说:

shared_ptr<T> lock() const noexcept;

回报:

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

但是在过期返回false(对象仍然存在)和shared_ptr的构造之间,另一个线程可以删除最后一个强引用,从而引发意外异常?如何防止这种情况?

还是我错过了什么?

4

1 回答 1

4

您不必阻止它,它由标准库的实现来处理。

引用的代码仅用于说明目的:行为lock()与此代码相同,但相对于其他线程是原子的。

如果您想知道它是如何完成的,您可以查看源代码。它是一个模板类,所以代码肯定会在头文件中。但要小心!标准 C++ 库源代码不适合胆小的人。

于 2013-06-27T12:08:08.577 回答