自己也有和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 分配的單個物件的記憶體空間的...