我有两个QSharedPointer,我可以检查他们是否使用==操作符这样检查两个QSharedPointer具有相同的数据
QSharedPointer1 == QSharedPointer2
或指向同一个对象,我必须写
QSharedPointer1.data() == QSharedPointer2.data()
存储在指针中的对象已经重载了运算符==。
我有两个QSharedPointer,我可以检查他们是否使用==操作符这样检查两个QSharedPointer具有相同的数据
QSharedPointer1 == QSharedPointer2
或指向同一个对象,我必须写
QSharedPointer1.data() == QSharedPointer2.data()
存储在指针中的对象已经重载了运算符==。
从QSharedPointer class reference:
bool operator==(const QSharedPointer<T>& ptr1, const QSharedPointer<X>& ptr2)
返回true,如果由PTR1引用的指针是一样的指针,通过引用PTR2。
第一个版本应该确定有关here
bool operator== (const QSharedPointer<T> & ptr1, const QSharedPointer<X> & ptr2)
返回true如果通过 PTR1引用的指针是一样的指针,通过引用PTR2。
你应该使用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)
// ...
或者说,我没有注意到“相关的非成员”。真是太遗憾了......谢谢 – Littlebitter 2013-02-14 16:27:57