c ++ map erase()

Jit*_*ani 9 c++

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

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

Lou*_*cio 12

不,如果它是一个裸指针,它不会释放内存.您需要确保适当地释放内存.

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

  • 如果您正在使用智能指针并且地图保存对象的最后一个引用,则当地图擦除时,智能指针的析构函数将清除内存.

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


Ken*_*oom 9

当你erase从a map<something,something_else*>,它只从地图中删除元素.它不会调用delete擦除元素上的操作符(或任何其他函数)来释放内存.


Tro*_*our 5

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


sbi*_*sbi 5

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

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

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