爲shared_ptr的的等於運算符的定義如下:C++的shared_ptr相等運算
template<class T, class U> inline bool operator==(
shared_ptr<T> const & a, shared_ptr<U> const & b)
{
return a.get() == b.get();
}
這似乎打破。將平等轉發給a和b所指的是不是更好?或者這會對圖書館用戶造成不公平的限制(因爲他們必須提供一個相等的操作符)( )?
如果我有一個包含shared_ptrs的map或hash_table,那麼當前定義 使等式不可用。例如,考慮
std::map<int, std::tr1::shared_ptr<T> > m1, m2;
我們不想檢查m1和m2中每個int的ptrs是否指向相同的值?
我可以通過展平m1,m2來實現我自己的平等(從每個平面構建集合, 取消引用shared_ptrs)。是否有一個STL技巧可以完成這個 或其他一些方式來測試shared_ptrs存在的平等嗎?
這取決於你平等的意思。對於指向「指向相同對象」的普通指針。對我來說,把這種平等概念擴展到shared_pointer似乎是合理的。 – 2011-04-19 21:39:18