shared_ptr<T> lock() const noexcept;
返回:
expired() ? shared_ptr<T>() : shared_ptr<T>(*this).
但是在expired中返回false(对象仍然存在)和shared_ptr的构造另一个线程可以删除最后一个强引用,从而抛出一个 意外的例外?怎么预防这个?
还是我错过了什么?
答案 0 :(得分:4)
您不必阻止它,它由标准库的实现来处理。
引用的代码仅用于说明目的:lock()
的行为与此代码相同,但与其他线程有关。
如果您想知道它是如何完成的,您可以查看源代码。它是一个模板类,因此代码肯定会在头文件中。但要小心!标准的C ++库源代码不适合胆小的人。