【问题标题】:Check two QSharedPointer have equal data检查两个 QSharedPointer 是否有相等的数据
【发布时间】:2015-10-22 17:15:08
【问题描述】:
我有两个 QSharedPointer,我可以像这样使用 operator== 检查它们是否指向同一个对象
QSharedPointer1 == QSharedPointer2
否则我必须写
QSharedPointer1.data() == QSharedPointer2.data()
存储在指针中的对象重载了 operator==。
【问题讨论】:
标签:
c++
qt
pointers
qsharedpointer
【解决方案1】:
你应该使用operator==:
bool operator== (const QSharedPointer & ptr1, const QSharedPointer & ptr2)
如果指针被引用,则返回真
ptr1 与 ptr2 引用的指针相同。如果 ptr2 的
模板参数不同于 ptr1 的,QSharedPointer 将
尝试执行自动 static_cast 以确保
被比较的指针是相等的。如果ptr2的模板参数不是
ptr1 的基类型或派生类型,您将收到编译器错误。
因此,无需通过data() 方法获取指针,+ 它将尝试执行static_cast 以匹配模板参数。
另外,请注意,存储在指针中的对象是否重载operator== 并不重要——您只是在这里比较指针,operator== 是为指针类型定义的。如果要比较指针所引用的对象,则需要取消引用指针并比较对对象的引用(这将调用T::operator== 方法):
if(*ptr1 == *ptr2)
// ...
【解决方案2】:
来自QSharedPointer class reference:
bool operator==(const QSharedPointer<T>& ptr1, const QSharedPointer<X>& ptr2)
如果 ptr1 引用的指针与 ptr2 引用的指针相同,则返回 true。
【解决方案3】:
第一个版本应该可以与here相关
bool operator== ( const QSharedPointer<T> & ptr1, const QSharedPointer<X> & ptr2 )
如果指针被引用,则返回真
ptr1 与 ptr2 引用的指针相同。