【问题标题】: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 引用的指针相同。

      【讨论】:

        猜你喜欢
        • 2020-02-12
        • 2015-08-21
        • 1970-01-01
        • 2013-12-02
        • 1970-01-01
        • 1970-01-01
        • 2011-08-09
        相关资源
        最近更新 更多