c++告訴我們在**用 new 分配的單個物件的記憶體空間的時候用 delete,**用 new 分配的一組物件的記憶體空間的時候用 delete。
很多人注意到了這個問題,但是卻不清楚為什麼要這樣做,不這樣做行不行。
關於 new 和 delete,其中又分為兩種情況:(1) 為基本資料型別分配和**空間;(2) 為自定義型別分配和**空間。
對於 (1),已經證明了 delete 和 delete 是等同的。但是對於 (2),情況就發生了變化。請看下面的程式。
#include ;
using namespace std;
class t
~t()
};int main()
大家可以自己執行這個程式,看一看 delete p1 和 delete p1 的不同結果,我就不在這裡貼執行結果了。
從執行結果中我們可以看出,delete p1 在**空間的過程中,只有 p1[0] 這個物件呼叫了析構函式,其它物件如 p1[1]、p1[2] 等都沒有呼叫自身的析構函式,這就是問題的癥結所在。如果用 delete,則在**空間之前所有物件都會首先呼叫自己的析構函式。
基本型別的物件沒有析構函式,所以**基本型別組成的陣列空間用 delete 和 delete 都是應該可以的;但是對於類物件陣列,只能用 delete。對於 new 的單個物件,只能用 delete 不能用 delete **空間。
所以乙個簡單的使用原則就是:new 和 delete、new 和 delete 對應使用。
delete與delete 的區別
如果是基本型別陣列呼叫delete就可以刪除之,而乙個自定義的結構陣列,卻最好使用delete,為什麼?原因如下 y new 10 delete y 10個元素所佔的記憶體都會被釋放,但是 如果有析構函式的話,只有第乙個元素的析構函式被呼叫,其他9個元素的析構函式沒有被呼叫 如果 的析構函式裡面有記...
delete與delete 的區別
一直很好奇delete 和 delete 有什麼不同?今天我從彙編的角度看一看 測試源 include int main 使用vs2019檢視其內部實現 可以看到兩個內部實現是一樣的,說明delete 和 delete 使用沒有區別 可是在網上查詢資料說,當析構物件陣列時必須要用delete 如果使...
delete 與 delete 釋放記憶體
以下內容來引自 我們通常從教科書上看到這樣的說明 delete 釋放new分配的單個物件指標指向的記憶體 delete 釋放new分配的物件陣列指標指向的記憶體 那麼,按照教科書的理解,我們看下下面的 int a new int 10 delete a 方式1 delete a 方式2 肯定會有很多...