我有一个std::list
ofboost::shared_ptr<T>
并且我想从中删除一个项目,但我只有一个 T* 类型的指针,它与列表中的一个项目匹配。
但是我猜我不能使用myList.remove( tPtr )
,因为 shared_ptr 没有实现==
它的模板参数类型。
我的直接想法是尝试哪个在语法上是正确的,但由于临时有一个单独的 use_count myList.remove( shared_ptr<T>(tPtr) )
,它会因双重删除而崩溃。shared_ptr
std::list< boost::shared_ptr<T> > myList;
T* tThisPtr = new T(); // This is wrong; only done for example code.
// stand-in for actual code in T using
// T's actual "this" pointer from within T
{
boost::shared_ptr<T> toAdd( tThisPtr ); // typically would be new T()
myList.push_back( toAdd );
}
{
//T has pointer to myList so that upon a certain action,
// it will remove itself romt the list
//myList.remove( tThisPtr); //doesn't compile
myList.remove( boost::shared_ptr<T>(tThisPtr) ); // compiles, but causes
// double delete
}
我看到的唯一选择是将 std::find 与自定义比较一起使用,或者循环遍历列表蛮力并自己找到它,但似乎应该有更好的方法。
我是否遗漏了一些明显的东西,或者这是否太不标准了,不能以清除干净/正常的方式使用?