检查两个QSharedPointer是否具有相等的数据

Check two QSharedPointer have equal data

本文关键字:数据 是否 QSharedPointer 两个 检查      更新时间:2023-10-16

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

QSharedPointer1 == QSharedPointer2

或者我必须写

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

存储在指针中的对象具有重载运算符==。

您应该使用operator==:

bool运算符==(const QSharedPointer&ptr1,const QSsharedPointer&ptr2)

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

因此,不需要通过data()方法获取指针,+它将尝试使用static_cast来匹配模板参数。

此外,请注意,存储在指针中的对象是否重载了operator==并不重要——这里只是比较指针,而operator==是为指针类型定义的。如果你想比较指针引用的对象,你需要取消引用指针并比较对对象的引用(这将调用T::operator==方法):

if(*ptr1 == *ptr2)
   // ...

来自QSharedPointer类引用:

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

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

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

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

如果引用的指针为ptr1与ptr2引用的指针相同。