亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

c++ map clear相關內存會清空嗎?

c++ map clear相關內存會清空嗎?

汪汪一只貓 2019-01-30 14:03:38
c++ map clear相關內存會清空嗎
查看完整描述

3 回答

?
心有法竹

TA貢獻1866條經驗 獲得超5個贊

根據你的問題,我覺得它和下面的問題是等價的:
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的線程安全性做任何承諾



查看完整回答
反對 回復 2019-03-20
?
當年話下

TA貢獻1890條經驗 獲得超9個贊

記住C++ 清理 new 關鍵的內存 只有delete 才能釋放。
map 就是一個 模板類而已 會調用析構函數。 你認為它會 寫delete嗎 答案是不會的。
map 存的是對象可以釋放內存。
但是 存的是指針 只能自己釋放。

查看完整回答
反對 回復 2019-03-20
?
寶慕林4294392

TA貢獻2021條經驗 獲得超8個贊

clear清除了key-value鍵值對和內容,但如果涉及到在堆上開辟內存的話,這些內存還要程序員手動釋放。

查看完整回答
反對 回復 2019-03-20
  • 3 回答
  • 0 關注
  • 3008 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號