簡體   English   中英

c ++ map erase()

[英]c++ map erase()

我有一張地圖,我的價值是動態分配的。 當我對元素執行erase()時,這會釋放內存還是只從地圖中刪除元素。

我實際上需要保持內存不變。 我只需要從地圖中刪除元素,因為這個動態分配的結構在代碼的其他地方使用。

不,如果它是一個裸指針,它不會釋放內存。 您需要確保適當地釋放內存。

  • 如果您使用裸指針,請確保在需要時正確清理內存。

  • 如果您正在使用智能指針並且地圖保存對象的最后一個引用,則當地圖擦除時,智能指針的析構函數將清除內存。

STL容器無法管理您的內存,因此請確保執行此操作。 在將對象放入容器時,我幾乎總是使用boost的shared_ptr

當你erasemap<something,something_else*>它只是從地圖上移除的元素。 它不會調用擦除元素上的delete操作符(或任何其他函數)來釋放內存。

不,地圖中指針引用的對象不會被刪除。

C ++標准庫中的容器具有語義。 它們會破壞你放入它們的物體。 當這些對象是指針時,這些指針將被銷毀,但不會銷毀它們所引用的對象。

如果您的環境支持,請使用boost_shared_ptr<>std::map< key, boost_shared_ptr<value> > )或std::tr1::shared_ptr<>std::shared_ptr<>來擺脫大多數與內存相關的問題。

當您擦除元素時,標准容器永遠不會破壞您放置在其中的動態分配對象。 基本上,如果你創建了它,那么你需要銷毀它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM