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