C 中delete和delete 的區別說明

2021-06-16 17:49:33 字數 956 閱讀 4269

**:

一直對c++中的delete和delete的區別不甚了解,今天遇到了,上網查了一下,得出了結論。希望本文可以對你有所幫助

c++告訴我們在**用 new 分配的單個物件的記憶體空間的時候用 delete,**用 new 分配的一組物件的記憶體空間的時候用 delete。  關於 new 和 delete,其中又分為兩種情況:(1) 為基本資料型別分配和**空間;(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來釋放用new int申請的記憶體空間時,由於其為基本資料型別沒有析構函式,所以使用delete與delete 相同,兩者都會釋放申請的記憶體空間,若是自定義的資料型別,有析構函式時,用new 申請的空間,必須要用delete 來釋放,因為要delete 時會逐一呼叫物件陣列的析構函式,然後釋放空間,如果用delete,則只會呼叫第乙個物件的析構函式,後面物件的析構函式沒有被呼叫,那麼其空間是否釋放了呢?

C 中delete和delete 的區別

c 告訴我們在 用 new 分配的單個物件的記憶體空間的時候用 delete,用 new 分配的一組物件的記憶體空間的時候用 delete。很多人注意到了這個問題,但是卻不清楚為什麼要這樣做,不這樣做行不行。關於 new 和 delete,其中又分為兩種情況 1 為基本資料型別分配和 空間 2 為自...

C 中delete和delete 的區別

c 告訴我們在 用 new 分配的單個物件的記憶體空間的時候用 delete,用 new 分配的一組物件的記憶體空間的時候用 delete。很多人注意到了這個問題,但是卻不清楚為什麼要這樣做,不這樣做行不行。關於 new 和 delete,其中又分為兩種情況 1 為基本資料型別分配和 空間 2 為自...

C 中的delete和delete 區別

一直對c 中的delete和delete的區別不甚了解,今天遇到了,上網查了一下,得出了結論。做個備份,以免丟失。c 告訴我們在 用 new 分配的單個物件的記憶體空間的時候用 delete,用 new 分配的一組物件的記憶體空間的時候用 delete。關於 new 和 delete,其中又分為兩種...