多线程c ++中的std :: weak_ptr.lock语义

时间:2013-06-27 12:05:48

标签: c++ weak-ptr

标准说:

shared_ptr<T> lock() const noexcept;

返回:

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

但是在expired中返回false(对象仍然存在)和shared_ptr的构造另一个线程可以删除最后一个强引用,从而抛出一个 意外的例外?怎么预防这个?

还是我错过了什么?

1 个答案:

答案 0 :(得分:4)

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

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

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