c++ - 缺少 shared_ptr 和 weak_ptr 之间的相等性

标签 c++ c++11 shared-ptr

虽然我明白为什么 shared_ptrunique_ptr 没有 operator==,但我想知道为什么 没有shared_ptrweak_ptr。特别是因为您可以通过对 shared_ptr 的引用创建一个 weak_ptr。 我假设在 99% 的时间里您都需要 lhs.get() == rhs.get()。我现在会继续将其引入我的代码,除非有人能给我一个很好的理由,为什么不应该做这样的事情。

最佳答案

weak_ptr 没有 get() 方法,因为您需要在访问底层指针之前显式锁定 weak_ptr。明确这一点是一个深思熟虑的设计决定。如果转换是隐式的,那么很容易编写不安全的代码,如果对象的最后一个 shared_ptr 被销毁,而底层指针是从 weak_ptr 获得的仍在检查中。

This boost page很好地描述了陷阱以及为什么 weak_ptr 具有如此有限的接口(interface)。

如果你需要做一个快速比较,那么你可以做shared == weak.lock()。如果比较结果为真,那么您就知道 weak 必须仍然有效,因为您将单独的 shared_ptr 保存到同一对象。如果比较返回 false,则没有这样的保证。

关于c++ - 缺少 shared_ptr 和 weak_ptr 之间的相等性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10968189/

相关文章:

c++ - 使用Boost asio接收命令并执行

c++ - 为什么T2抛出bad_alloc异常时这段代码会发生内存泄漏

c++ - 我是否应该始终使用 shared_ptr 来创建类实例(而不是仅仅使用 new)?

c++ - Qt 信号 lambda 导致 shared_ptr 泄漏?

c++ - dlib vs opencv 什么时候使用

c++ - 如何在C++中生成随机矩阵?

c++ - 如何使用 inplace const char* 作为 std::string 内容

c++ - 动态加载是否与 C++ 标准严格兼容?

c++ - 具有通用等级的数组成员的类

c++ - 问题理解 shared_ptr