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



std表示:

shared_ptr<T> lock() const noexcept;

退货:

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

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

还是我错过了什么?

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

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

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

最新更新