2015-11-11 277 views
5

是否有一個標準謂詞來比較shared_ptr管理對象的相等性。比較shared_ptr對象相等

template<typename T, typename U> 
inline bool target_equal(const T& lhs, const U& rhs) 
{ 
    if(lhs && rhs) 
    { 
     return *lhs == *rhs; 
    } 
    else 
    { 
     return !lhs && !rhs; 
    } 
} 

我想要類似於上面的代碼,但是如果已經有一個標準的解決方案,將避免定義它自己。

+2

是否有必要,因爲你可以尊重他們嗎? – 101010

+3

@ 101010:'if'語句存在,因爲顯然你可能無法解引用它們。 – MSalters

+1

但是,在解引用它們時,我需要處理nulptr –

回答

6

不,沒有這樣的謂語。另一種方法是使用lambda函數 - 但您仍然需要自己定義它。

2

不,沒有標準的解決方案。 shared_ptr等的相等運算符只比較指針而不是管理對象。 您的解決方案很好。我建議這個版本來檢查,如果尖銳的物體是相同的,返回false如果共享指針之一爲空,另一種是不:

template<class T, class U> 
bool compare_shared_ptr(const std::shared_ptr<T>&a,const std::shared_ptr<U>&b) 
{ 
    if(a == b) return true; 
    if(a && b) return *a == *b; 
    return false; 
} 
+0

當一個指針爲空時,它返回'false',而OP的版本返回'true'。 – Quentin

+0

確實。我可以爭辯說,當一個共享指針爲空而另一個不是時返回false更合理,但OP的版本又不同。編輯答案反映了這一點。 – fortuna