天天看點

《從缺陷中學習C/C++》——6.10 delete與delete[]的差別

本節書摘來自異步社群出版社《從缺陷中學習c/c++》一書中的第6章,第6.10節,作者: 劉新浙 , 劉玲 , 王超 , 李敬娜 , ,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。

從缺陷中學習c/c++

代碼示例

現象&結果

申請的數組空間沒有全部釋放,造成記憶體洩露。用cppcheck工具執行靜态代碼掃描可以看到如下資訊:(error) mismatching allocation and deallocation: buf。

bug分析

對于數組類型,如 string str = new string[10],用delete str和delete [] str的差別是,delete str隻對str[0]調用了析構函數,而delete []str則對str數組裡的每個元素都調用了析構函數。對于單個元素,如 int p =new int (10),delete和delete []都可以釋放記憶體。

正确代碼

程式設計建議

操作記憶體的時候,new[]一定要和delete[]對應。

本文僅用于學習和交流目的,不代表異步社群觀點。非商業轉載請注明作譯者、出處,并保留本文的原始連結。

繼續閱讀