std::weak_ptr::lock 和对象销毁
std::weak_ptr::lock and object destruction
我知道在多线程环境中检查一个对象是否已经被std::shared_ptr<T>::use_count() == 0
完全删除是不安全的,因为对象的析构函数可能还没有完成。
但是使用 std::weak_ptr::lock()
呢?
if (weak_ptr.lock() == nullptr) {
// The object's destructor is guaranteed to be completed?
}
以下应该都是等价的:
weak_ptr.use_count() == 0
weak_ptr.lock() == nullptr
weak_ptr.expired()
他们认为最后的管理 shared_ptr
已经开始毁灭。它们并不表示托管对象尚未开始销毁,也不表示它已完成销毁。
我知道在多线程环境中检查一个对象是否已经被std::shared_ptr<T>::use_count() == 0
完全删除是不安全的,因为对象的析构函数可能还没有完成。
但是使用 std::weak_ptr::lock()
呢?
if (weak_ptr.lock() == nullptr) {
// The object's destructor is guaranteed to be completed?
}
以下应该都是等价的:
weak_ptr.use_count() == 0
weak_ptr.lock() == nullptr
weak_ptr.expired()
他们认为最后的管理 shared_ptr
已经开始毁灭。它们并不表示托管对象尚未开始销毁,也不表示它已完成销毁。