C shared_ptr 相等运算符

新手上路,请多包涵

shared_ptr 的相等运算符定义如下:

 template<class T, class U> inline bool operator==(
    shared_ptr<T> const & a, shared_ptr<U> const & b)
{
    return a.get() == b.get();
}

这似乎坏了。将相等性转发到 a 和 b 指向的内容不是更好吗?或者这会对图书馆的用户造成不公平的限制(因为他们必须提供平等运算符)?

如果我有一个包含 shared_ptrs 的 map 或 hash_table,那么当前的定义会使相等性不可用。例如,考虑

std::map<int, std::tr1::shared_ptr<T> > m1, m2;

我们不想检查 m1 和 m2 中每个 int 的 ptrs 是否指向相同的值?

我可以通过将 m1、m2 展平来实现我自己的相等性(从每个构造集合,沿途取消引用 shared_ptrs)。是否有一个 STL 技巧可以完成这个或其他方式来在 shared_ptrs 存在的情况下巧妙地测试相等性?

原文由 user231536 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.7k
1 个回答

它没有损坏,因为 shared_ptr 在概念上是一个指针,因此它实现了 指针 相等。当你测试两个指针是否相等时,你想知道它们是否指向内存中的同一个地方。

原文由 Fred Foo 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题