1
A
回答
4
代替人工循環搜索的元素,我寧願用std::find_if
auto it = std::find_if(lst.begin(),
lst.end(),
[&val](datalist const &d) { return d.index == val; });
if (it != lst.end())
{
delete *it;
lst.erase(it);
}
這並不是說你沒有正確地這樣做。
但是,如果您考慮使用某種形式的智能點,例如std::unique_ptr
,std::shared_ptr
或boost的智能指針,那麼您的代碼將會得到改進,那麼您不必親自管理內存。
3
如果您改變std::list
持有datalist
實例,而不是datalist*
指針,那麼你不必delete
的datalist
實例手動了。當您從std::list
(或任何其他STL容器)中刪除元素時,元素的數據會自動爲您自動釋放。如果元素是一個定義了析構函數的類/結構體,則會調用析構函數。
試試這個:
std::list<datalist> m_DataList;
。
datalist AR; // <-- local variable on the stack, freed when out of scope
AR.index = ...;
AR.number = ...;
mylist.push_back(AR); // <-- pushes a copy-constructed instance of the variable
。
std::list<datalist>::iterator Iter1 = m_DataList.begin();
while(Iter1 != m_DataList.end())
{
if (Iter1->index == m_SomeVar)
{
m_DataList.erase(Iter1); // <-- copied datalist instance is freed automatically
break;
}
++Iter1;
}
相關問題
- 1. 從std :: list中刪除<Value>使用指向Value的原始指針?
- 2. 兩個指針沒有正確刪除
- 3. std :: list實現&指針arithemetic。
- 4. 使用對象從std :: list中刪除
- 5. 如何正確刪除指向回調函數的指針。
- 6. 如何從解析中的指針數組中刪除指針?
- 7. 指針錯誤,中斷刪除[]指針
- 8. std :: list remove_if刪除節點?
- 9. 如何在擦除en元素後正確指向std :: list(double for循環)?
- 10. 如何在不同的std :: vector中刪除相同的指針?
- 11. 如何刪除指針指針?
- 12. 如何刪除動態數組指針正確
- 13. 'std :: list <_Ty> :: push_back':無法將'this'指針從'const std :: list <_Ty>'轉換爲'std :: list <_Ty>''
- 14. 從一個指針刪除的指針
- 15. 如何從boost :: ptr_vector中刪除指針而不刪除對象?
- 16. 指針 - 刪除
- 17. 如何從scala中的List(List(List()))中刪除空案例?
- 18. 如何將vC++(例如:IListPtr)指針轉換爲std :: list?
- 19. 刪除指針的指針
- 20. 刪除指針從功能
- 21. 刪除指針
- 22. 刪除指針
- 23. 指針刪除
- 24. 正確刪除一個指針的列表
- 25. c + +刪除指針
- 26. 正確解除引用指針指針的問題
- 27. 使用std :: unary_function清除std :: vector指針
- 28. 什麼是刪除數組中指針的正確方法?
- 29. 從std :: list中刪除CCNode會導致XCode中的錯誤
- 30. 從迭代器中刪除std :: list中的條目
不,你應該使用智能指針。 –
'm_DataList'的類型是什麼? –
「while」行中是否有額外的';'出現錯字,還是故意的?如果是故意的,那麼你有問題。 –