關於delete 和delete的區別

2021-07-31 00:13:16 字數 919 閱讀 3242

自己也有和lz同樣的疑惑,於c++屆還是小白一枚啊。

問題:看高質量c++程式設計的時候有個地方沒看懂,就是在string的析構函式中釋放m_data時用delete  m_data,但後面跟著有個注釋「

由於m_data 是內部資料型別,也可以寫成 delete m_data;

」,delete m_data不是只釋放乙個單元麼?

m_data的定義是: char *m_data;

// string 的析構函式

string::~string(void)

// string 的普通建構函式

string::string(const char *str)

else

}更多 0

前輩回答解惑

delete m_data不是只釋放乙個單元麼?   

不是,

對於 char, int, float....等等內部資料型別, delete 和 delete 一樣

但對於類就大有不同 比如

char* p = new char[128];

delete p; 和

delete p;

效果一樣,p的所有記憶體都釋放了,

delete 和 delete 的不同之處在對class 的釋放,

delete只會呼叫乙個元素的析構函式,而delete則呼叫所有元素的析構

比如 class t ; };

t* p = new t[128];

delete p; 和

delete p;

都內部呼叫了free釋放p的所有(128個)元素,

但 delete是呼叫了第乙個元素的析構,

而delete 則是正確的呼叫128個元素的析構

關於delete 和 delete 二

3.下面我們來看看上面提到的4位元組是幹什麼用的。int main 執行結果 adress after malloc 0x804a008 size 104 a a adress after new 0x804a00c number of a at 0x804a008 100 size of a at...

關於delete和delete 的區別

在c 動態記憶體分配中我們常用到new和delete兩種操作,new用來申請記憶體,delete用來釋放記憶體。那麼問題來了,我們應該用delete來釋放記憶體還是用delete來釋放記憶體呢?為了得到答案我做了一下實驗。注 一下實驗在使用delete和delete得到的結果是一樣的,不重複po圖 ...

delete和delete 的區別

剛才在寫一段例子程式的時候,發現對於乙個指標型別的陣列t p,delete p和delete p的效果一樣。看了一下c primer和c programming language都沒有找到解釋,於是在網路上搜尋一下,發現了很好的解釋。整理一下 c 告訴我們在 用 new 分配的單個物件的記憶體空間的...