我有一张地图,我的价值是动态分配的.当我对元素执行erase()时,这会释放内存还是只从地图中删除元素.
我实际上需要保持内存不变.我只需要从地图中删除元素,因为这个动态分配的结构在代码的其他地方使用.
Lou*_*cio 12
不,如果它是一个裸指针,它不会释放内存.您需要确保适当地释放内存.
如果您使用裸指针,请确保在需要时正确清理内存.
如果您正在使用智能指针并且地图保存对象的最后一个引用,则当地图擦除时,智能指针的析构函数将清除内存.
STL容器无法管理您的内存,因此请确保执行此操作.shared_ptr
在将对象放入容器时,我几乎总是使用boost .
不,地图中指针引用的对象不会被删除.
C++标准库中的容器具有值语义.它们会破坏你放入它们的物体.当这些对象是指针时,这些指针将被销毁,但不会销毁它们所引用的对象.
使用boost_shared_ptr<>
(std::map< key, boost_shared_ptr<value> >
)或std::tr1::shared_ptr<>
或std::shared_ptr<>
,如果您的环境支持它,可以摆脱大多数与内存相关的问题.