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