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的線程安全性做任何承諾
- 3 回答
- 0 關注
- 3008 瀏覽
添加回答
舉報