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