c++ - std::weak_ptr::锁和对象销毁

标签 c++ multithreading shared-ptr weak-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已经开始销毁的解释。它们并不意味着托管对象尚未开始销毁,也不意味着它已完成销毁。

关于c++ - std::weak_ptr::锁和对象销毁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68276991/

相关文章:

c++ - 混合 C 和 C++、原始指针和( boost )共享指针

c++ - 由于C++17支持数组的shared_ptr,这是否意味着ctor和reset中不再需要T[]的显式删除器?

c++ - 跨 DLL 边界使用单例

c++ - 如何从 C++ 数组中删除重复项?

java - 理解 Goetz 关于 HttpSession 的线程安全的文章

python - 我应该为仅存在于 {class,method} 中的变量使用线程本地存储吗?

c++ - 我的缓冲区会被所有连接使用吗?

c++ - 如何在 Windows 8 中获取事件窗口的标题颜色

c++ - 控制台程序中的定时器

C:用线程来代替这个?