最近中文字幕高清中文字幕无,亚洲欧美高清一区二区三区,一本色道无码道dvd在线观看 ,一个人看的www免费高清中文字幕

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

c++ map clear相關內(nèi)存會清空嗎?

c++ map clear相關內(nèi)存會清空嗎?

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

3 回答

?
心有法竹

TA貢獻1866條經(jīng)驗 獲得超5個贊

根據(jù)你的問題,我覺得它和下面的問題是等價的:
std::map<T1,T2>模板類,clear成員函數(shù)的作用是什么,以及如何影響其控制的內(nèi)存
下面我來講講這一點:

std::map<T1 key,T2 value>::clear()成員函數(shù)本身的作用是將map所有的節(jié)點都釋放,執(zhí)行完成之后map成為一個空映射表
由于map會釋放節(jié)點,所以如果節(jié)點是對象,而非指針的時候,clear會調(diào)用對象的析構函數(shù)
在這種情況下,map會釋放相關內(nèi)存的占用
但是如果節(jié)點是指針而非對象的時候,情況就比較復雜,因為clear不會主動進行釋放指針指向的內(nèi)存。這個時候需要用戶在清理map的時候進行處理
如果指針是指向的常量地址(比如常量字符串、常量數(shù)組之類),則可以無需釋放
如果指針是指向的對象地址,而這個對象本身是全局對象或者另有程序控制它的生命周期,則也可以無需釋放
對于上面兩種情況,map的clear可以直接調(diào)用無需特別的自定義處理
但是對于指針是通過new、malloc、alloc等方式獲取的,而且僅有map獲取了持有權,則需要在清理的時候,遍歷所有的節(jié)點,執(zhí)行內(nèi)存釋放后,再調(diào)用clear
補充幾點:
std::map<T1,T2>::iteator 可以像std::list<T>::iteator一樣,遍歷map的所有節(jié)點
作為map的key,請不要使用指針,因為map會將指針作為類似整數(shù)一樣的處理,而不會調(diào)用相關的比較操作,另外key被清理的時候,情況和value一樣,參考上面的描述
map并非線程安全的,這點尤其注意 stl并沒有對map的線程安全性做任何承諾



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

TA貢獻1890條經(jīng)驗 獲得超9個贊

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

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

TA貢獻2021條經(jīng)驗 獲得超8個贊

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

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

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號