我知道在多线程环境中检查对象是否已被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
已经开始销毁的解释。它们并不意味着托管对象尚未开始销毁,也不意味着它已完成销毁。
关于c++ - std::weak_ptr::锁和对象销毁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68276991/