我有一张动态分配我的值的地图。当我对元素执行erase()时,这会释放内存还是只从地图中删除元素。
我实际上需要保持内存不变。我只需要从地图中删除元素,因为这个动态分配的结构在代码的其他地方使用。
答案 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)
当您擦除元素时,标准容器永远不会破坏您放置在其中的动态分配对象。基本上,如果你创建它,那么你需要销毁它。