7
我有一個我用來跟蹤對象的weak_ptrs列表。在某個時候,我想從給出shared_ptr或weak_ptr的列表中刪除一個項目。從weak_ptrs列表中刪除項目
#include <list>
int main()
{
typedef std::list< std::weak_ptr<int> > intList;
std::shared_ptr<int> sp(new int(5));
std::weak_ptr<int> wp(sp);
intList myList;
myList.push_back(sp);
//myList.remove(sp);
//myList.remove(wp);
}
然而,當我去掉上面的線,該程序將無法建立:
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\list(1194): error C2678: binary '==' : no operator found which takes a left-hand operand of type 'std::tr1::weak_ptr<_Ty>' (or there is no acceptable conversion)
如何從給定的一個shared_ptr或weak_ptr的列表中刪除一個項目?
有一個'owner_before',雖然,它實現了部分order.So你也可以寫lambda作爲'[WP](STD :: weak_ptr的 P){返回!(p.owner_before(WP) || wp.owner_before(p));' - 不需要鎖。另外,在你的代碼中,我想你錯過了'swp == sp == 0'的情況。 –
MSalters
2012-04-12 10:31:43
有沒有辦法做到這一點沒有拉姆達?我會在很多不同的地方移除物品。我看到remove_if謂詞是在每個元素上單獨調用的,但我需要像上面那樣比較2個指針。 – user987280 2012-04-12 21:26:19
@ user987280當然,您可以使用函數或自由函數來代替lambda。但是謂詞被稱爲每個元素的問題究竟是什麼? – mkaes 2012-04-13 13:16:15