2

我有两个 QSharedPointer,我可以像这样使用operator==检查它们是否指向同一个对象

QSharedPointer1 == QSharedPointer2

或者我必须写

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

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

4

3 回答 3

2

你应该使用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)
   // ...
于 2013-02-14T16:25:01.470 回答
1

QSharedPointer 类参考

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

如果 ptr1 引用的指针与 ptr2 引用的指针相同,则返回 true。

于 2013-02-14T16:23:44.757 回答
0

第一个版本应该可以与这里相关

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

如果 ptr1 引用的指针与 ptr2 引用的指针相同,则返回 true。

于 2013-02-14T16:23:43.523 回答