虽然我明白为什么 shared_ptr
和 unique_ptr
没有 operator==
,但我想知道为什么 没有shared_ptr
和 weak_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/