检查两个QSharedPointer有相同的数据

时间:2013-02-14 16:18:24

标签: c++ qt pointers qsharedpointer

我有两个QSharedPointer,我可以检查他们是否使用 operator == 指向相同的对象

QSharedPointer1 == QSharedPointer2

或者我必须写

QSharedPointer1.data() == QSharedPointer2.data()

存储在指针中的对象重载了operator ==。

3 个答案:

答案 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引用的指针相同。