2

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 に答える