c ++ map erase()

时间:2010-07-01 18:07:00

标签: c++

我有一张动态分配我的值的地图。当我对元素执行erase()时,这会释放内存还是只从地图中删除元素。

我实际上需要保持内存不变。我只需要从地图中删除元素,因为这个动态分配的结构在代码的其他地方使用。

4 个答案:

答案 0 :(得分:11)

如果它是一个裸指针,它不会释放内存。您需要确保正确释放内存。

  • 如果您使用裸指针,请确保在需要时正确清理内存。

  • 如果你正在使用智能指针并且地图保存了对象的最后一个引用,那么当地图擦除它时,智能指针的析构函数将清理内存。

STL容器无法管理您的内存,因此请确保执行此操作。将对象放入容器时,我几乎总是使用boost shared_ptr

答案 1 :(得分:9)

当您从erase map<something,something_else*>时,它只会从地图中删除该元素。它不会调用擦除元素上的delete运算符(或任何其他函数)来释放内存。

答案 2 :(得分:5)

不,地图中指针引用的对象不会被删除。

C ++标准库中的容器具有 value 语义。它们会破坏你放入它们的物体。当这些对象是指针时,这些指针将被销毁,但不会销毁它们所引用的对象。

如果您的环境支持,请使用boost_shared_ptr<>std::map< key, boost_shared_ptr<value> >)或std::tr1::shared_ptr<>std::shared_ptr<>来摆脱大多数与内存相关的问题。

答案 3 :(得分:4)

当您擦除元素时,标准容器永远不会破坏您放置在其中的动态分配对象。基本上,如果你创建它,那么你需要销毁它。