2013-02-14 76 views
1

我有两个QSharedPointer,我可以检查他们是否使用==操作符这样检查两个QSharedPointer具有相同的数据

QSharedPointer1 == QSharedPointer2 

或指向同一个对象,我必须写

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

存储在指针中的对象已经重载了运算符==。

回答

0

QSharedPointer class reference

bool operator==(const QSharedPointer<T>& ptr1, const QSharedPointer<X>& ptr2)

返回true,如果由PTR1引用的指针是一样的指针,通过引用PTR2。

+0

或者说,我没有注意到“相关的非成员”。真是太遗憾了......谢谢 – Littlebitter 2013-02-14 16:27:57

0

第一个版本应该确定有关here

bool operator== (const QSharedPointer<T> & ptr1, const QSharedPointer<X> & ptr2)

返回true如果通过 PTR1引用的指针是一样的指针,通过引用PTR2。

2

你应该使用operator==

布尔运算符==(const的QSharedPointer & PTR1,常量QSharedPointer & PTR2)

返回true如果通过 PTR1引用的指针是一样的指针与ptr2引用的一样。如果ptr2的 模板参数与ptr1不同,则QSharedPointer将尝试执行自动static_cast以确保所比较的指针相等。如果ptr2的模板参数不是 ptr1的基类或派生类型,则会出现编译器错误。

因此,没有必要通过data()方法来获取指针,它+会尝试做static_cast相匹配的模板参数。

此外,请注意,存储在指针中的对象是否已超载operator== - 您只是在此比较指针,而operator==是针对指针类型定义的。如果要比较哪个指针所指的对象,您需要取消引用指针和比较的对象引用(这将调用T::operator==法):

if(*ptr1 == *ptr2) 
    // ... 
相关问题