我有两个QSharedPointer,我可以检查它们是否指向同一个对象,使用这样的operator==
QSharedPointer1 == QSharedPointer2否则我必须写
QSharedPointer1.data() == QSharedPointer2.data()对象中存储在指针中的对象重载了operator==。
发布于 2013-02-14 16:23:44
来自QSharedPointer类引用
bool operator==(const QSharedPointer<T>& ptr1, const QSharedPointer<X>& ptr2)如果ptr1引用的指针与ptr2引用的指针相同,则返回true。
发布于 2013-02-14 16:25:01
你应该使用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-14 16:23:43
第一个版本应该与这里相关
bool operator== ( const QSharedPointer<T> & ptr1, const QSharedPointer<X> & ptr2 )如果ptr1引用的指针与ptr2引用的指针相同,则返回true。
https://stackoverflow.com/questions/14879250
复制相似问题