我有一個std::list
的boost::shared_ptr<T>
,我想從中刪除一個項目,但我只有一個T *類型的指針,它與列表中的某個項目相匹配。從列表中刪除boost :: shared_ptr的正確方法是什麼?
但是我不能使用myList.remove(tPtr)
我猜測是因爲shared_ptr沒有爲其模板參數類型實現==
。
我的直接想法是嘗試myList.remove(shared_ptr<T>(tPtr))
它在語法上是正確的,但它會從雙刪除崩潰,因爲臨時shared_ptr
有一個單獨的use_count。
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 ::找到通過列表強力的自定義比較,或循環並找到它自己,但它似乎應該有一個更好的辦法。
我是否錯過了一些明顯的東西,或者這太不合標準了嗎?
+1爲最直接的解決問題。 – 2010-04-08 01:51:48