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 已经开始毁灭。它们并不表示托管对象尚未开始销毁,也不表示它已完成销毁。