2013-02-14 67 views
1

我有兩個QSharedPointer,我可以檢查他們是否使用==操作符這樣檢查兩個QSharedPointer具有相同的數據

QSharedPointer1 == QSharedPointer2 

或指向同一個對象,我必須寫

QSharedPointer1.data() == QSharedPointer2.data() 

存儲在指針中的對象已經重載了運算符==。

回答

0

QSharedPointer class reference

bool operator==(const QSharedPointer<T>& ptr1, const QSharedPointer<X>& ptr2)

返回true,如果由PTR1引用的指針是一樣的指針,通過引用PTR2。

+0

或者說,我沒有注意到「相關的非成員」。真是太遺憾了......謝謝 – Littlebitter 2013-02-14 16:27:57

0

第一個版本應該確定有關here

bool operator== (const QSharedPointer<T> & ptr1, const QSharedPointer<X> & ptr2)

返回true如果通過 PTR1引用的指針是一樣的指針,通過引用PTR2。

2

你應該使用operator==

布爾運算符==(const的QSharedPointer & PTR1,常量QSharedPointer & PTR2)

返回true如果通過 PTR1引用的指針是一樣的指針與ptr2引用的一樣。如果ptr2的 模板參數與ptr1不同,則QSharedPointer將嘗試執行自動static_cast以確保所比較的指針相等。如果ptr2的模板參數不是 ptr1的基類或派生類型,則會出現編譯器錯誤。

因此,沒有必要通過data()方法來獲取指針,它+會嘗試做static_cast相匹配的模板參數。

此外,請注意,存儲在指針中的對象是否已超載operator== - 您只是在此比較指針,而operator==是針對指針類型定義的。如果要比較哪個指針所指的對象,您需要取消引用指針和比較的對象引用(這將調用T::operator==法):

if(*ptr1 == *ptr2) 
    // ... 
相關問題