我有两个 QSharedPointer,我可以像这样使用operator==检查它们是否指向同一个对象
QSharedPointer1 == QSharedPointer2
或者我必须写
QSharedPointer1.data() == QSharedPointer2.data()
存储在指针中的对象具有重载的 operator==。
我有两个 QSharedPointer,我可以像这样使用operator==检查它们是否指向同一个对象
QSharedPointer1 == QSharedPointer2
或者我必须写
QSharedPointer1.data() == QSharedPointer2.data()
存储在指针中的对象具有重载的 operator==。
你应该使用operator==
:
bool operator== ( const QSharedPointer & ptr1, const QSharedPointer & ptr2 )
如果 ptr1 引用的指针与 ptr2 引用的指针相同,则返回 true。如果 ptr2 的模板参数与 ptr1 的不同,QSharedPointer 将尝试执行自动 static_cast 以确保被比较的指针相等。如果 ptr2 的模板参数不是 ptr1 的基类型或派生类型,则会出现编译器错误。
因此,无需通过data()
方法获取指针,+ 它将尝试static_cast
匹配模板参数。
另外,请注意,存储在指针中的对象是否已重载并不重要operator==
——您只是在此处比较指针,并且operator==
是为指针类型定义的。如果要比较指针所指的对象,则需要取消引用指针并比较对对象的引用(这将调用T::operator==
方法):
if(*ptr1 == *ptr2)
// ...
bool operator==(const QSharedPointer<T>& ptr1, const QSharedPointer<X>& ptr2)
如果 ptr1 引用的指针与 ptr2 引用的指针相同,则返回 true。
第一个版本应该可以与这里相关
bool operator== ( const QSharedPointer<T> & ptr1, const QSharedPointer<X> & ptr2 )
如果 ptr1 引用的指针与 ptr2 引用的指针相同,则返回 true。