Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
标准 说:
shared_ptr<T> lock() const noexcept;
回报:
expired() ? shared_ptr<T>() : shared_ptr<T>(*this).
但是在过期返回false(对象仍然存在)和shared_ptr的构造之间,另一个线程可以删除最后一个强引用,从而引发意外异常?如何防止这种情况?
还是我错过了什么?
您不必阻止它,它由标准库的实现来处理。
引用的代码仅用于说明目的:行为lock()与此代码相同,但相对于其他线程是原子的。
lock()
如果您想知道它是如何完成的,您可以查看源代码。它是一个模板类,所以代码肯定会在头文件中。但要小心!标准 C++ 库源代码不适合胆小的人。