2 つの QSharedPointer があります。このようにoperator==を使用して、それらが同じオブジェクトを指しているかどうかを確認できますか?
QSharedPointer1 == QSharedPointer2
または私は書かなければなりません
QSharedPointer1.data() == QSharedPointer2.data()
ポインターに格納されているオブジェクトは、operator== をオーバーロードしています。
2 つの QSharedPointer があります。このようにoperator==を使用して、それらが同じオブジェクトを指しているかどうかを確認できますか?
QSharedPointer1 == QSharedPointer2
または私は書かなければなりません
QSharedPointer1.data() == QSharedPointer2.data()
ポインターに格納されているオブジェクトは、operator== をオーバーロードしています。
使用する必要があります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)
// ...
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 によって参照されるポインターと同じ場合、true を返します。