c++ map clear相关内存会清空吗

 我来答
传薪网络
推荐于2018-03-02 · TA获得超过1355个赞
知道小有建树答主
回答量:635
采纳率:92%
帮助的人:240万
展开全部
根据你的问题,我觉得它和下面的问题是等价的:
std::map<T1,T2>模板类,clear成员函数的作用是什么,以及如何影响其控制的内存
下面我来讲讲这一点:

std::map<T1 key,T2 value>::clear()成员函数本身的作用是将map所有的节点都释放,执行完成之后map成为一个空映射表
由于map会释放节点,所以如果节点是对象,而非指针的时候,clear会调用对象的析构函数
在这种情况下,map会释放相关内存的占用
但是如果节点是指针而非对象的时候,情况就比较复杂,因为clear不会主动进行释放指针指向的内存。这个时候需要用户在清理map的时候进行处理
如果指针是指向的常量地址(比如常量字符串、常量数组之类),则可以无需释放
如果指针是指向的对象地址,而这个对象本身是全局对象或者另有程序控制它的生命周期,则也可以无需释放
对于上面两种情况,map的clear可以直接调用无需特别的自定义处理
但是对于指针是通过new、malloc、alloc等方式获取的,而且仅有map获取了持有权,则需要在清理的时候,遍历所有的节点,执行内存释放后,再调用clear
补充几点:
std::map<T1,T2>::iteator 可以像std::list<T>::iteator一样,遍历map的所有节点
作为map的key,请不要使用指针,因为map会将指针作为类似整数一样的处理,而不会调用相关的比较操作,另外key被清理的时候,情况和value一样,参考上面的描述
map并非线程安全的,这点尤其注意 stl并没有对map的线程安全性做任何承诺
霜语游侠
2015-11-06 · TA获得超过606个赞
知道答主
回答量:83
采纳率:0%
帮助的人:44万
展开全部
会清除其中数据的内存,但是map对象本身占用内存是不会清除的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
bigjshop
2015-09-28 · 超过25用户采纳过TA的回答
知道答主
回答量:67
采纳率:0%
帮助的人:50.1万
展开全部
clear清除了key-value键值对和内容,但如果涉及到在堆上开辟内存的话,这些内存还要程序员手动释放。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
HBJKZLH
2015-02-03
知道答主
回答量:17
采纳率:0%
帮助的人:14.9万
展开全部
记住C++ 清理 new 关键的内存 只有delete 才能释放。
map 就是一个 模板类而已 会调用析构函数。 你认为它会 写delete吗 答案是不会的。
map 存的是对象可以释放内存。
但是 存的是指针 只能自己释放。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式