【发布时间】:2014-05-06 21:13:33
【问题描述】:
我注意到 stdlib 没有为 shared_ptr 和原始指针的相等运算符提供重载。如果你有一个 std::unordered_set<std::shared_ptr<Foo>> 并且你想通过传递一个原始的 Foo* 来擦除元素,这尤其不方便
是否有任何具体原因没有这样的过载?在我看来,它很容易实现:
template<typename T1, typename T2>
bool operator==(const T1 * a, const std::shared_ptr<T2> & b) {
return a == b.get();
}
...这个实现会有什么危险或意外吗?
【问题讨论】:
-
我对规范的记忆很差,但我相信围绕不同类型的指针有一些警告。有什么理由不应该是
operator==(const T * a, const std::shared_ptr<T> & b)? -
我认为 OP 想要比较两个指针而不考虑类型,只是为了查看原始内存位置是否与共享指针中的内容匹配。从某种意义上说,这就像拥有一个指向 int 的指针和一个指向 float 的指针并将它们都转换为 void * 以查看它们是否相同。不知道为什么有人会想采取这种方法。
-
其实,不,我不打算比较任意指针。如果 T1 和 T2 不是相同的继承层次结构,这甚至不会编译。
标签: c++ c++11 operator-overloading shared-ptr