C delete與delete 的區別

2021-09-19 10:39:44 字數 1185 閱讀 9568

c++中對new申請的記憶體釋放方式有delete和delect兩種方式,那這兩者到底有哪些區別呢?

可能你見過這樣的表述:用new分配記憶體,就用delect釋放記憶體;使用new分配記憶體,就用delete釋放記憶體。具體來講就是delect釋放new分配的單個物件指標指向的記憶體,delete釋放new分配的物件陣列指標指向的記憶體。那為什麼會這樣呢?

關於動態申請的記憶體,分兩種情況:基本資料型別的分配和自定義資料型別的分配。

看如下的**:

int* parr = new int[10];

delete parr;//方式一

delete parr;//方式二

很多人認為方式一會造成記憶體洩露,其實並不會,針對基本資料型別方法一和方法二均可。首先需要知道new和delete時做了什麼事情,當你使用new時,會有兩件事發生:

1、通過operator new過載函式記憶體被配置

2、會有乙個或以上的constructors會針對此記憶體被呼叫

當使用delete時,也會有兩件事發生:

1、乙個(或以上)的destructors會針對此記憶體被呼叫

2、通過函式operator delete釋放記憶體

對於基本資料型別物件沒有析構函式,並且new在分配記憶體時會記錄分配的空間大小以及記憶體的起始位址,delete可以對記憶體正確釋放記憶體,無需呼叫析構函式釋放其餘指標。因此兩種方式均可。

這裡一般指的是類,當new申請了物件陣列時,陣列中有多少個元素,就呼叫幾次建構函式。申請成功返回乙個指標指向這塊記憶體。當僅使用delete釋放這塊空間時,由於new時會記錄申請空間的大小,所以釋放對應一次new所申請的空間,只會對物件陣列中的第乙個元素進行析構。而使用delete時,會逐個呼叫析構函式。如一下**

class test

~test()

private:

int ma;

};int main()

執行結果:

如圖所示,如果使用delect,呼叫了 十次構造和一次析構,使得程式奔潰。如果使用delete呼叫十次構造和十次析構

C delete 和delete 的區別

臨睡前突然看到乙個問題,c 中 delete和delete 兩種運算子的區別?帶著這個問題查了相關資料,並做了實驗。部分結果參考網上資料,感謝部落格 漫步雲端 c 告訴我們在 用 new 分配的單個物件的記憶體空間的時候用 delete,用 new 分配的一組物件的記憶體空間的時候用 delete。...

delete與delete 的區別

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

delete與delete 的區別

如果是基本型別陣列呼叫delete就可以刪除之,而乙個自定義的結構陣列,卻最好使用delete,為什麼?原因如下 y new 10 delete y 10個元素所佔的記憶體都會被釋放,但是 如果有析構函式的話,只有第乙個元素的析構函式被呼叫,其他9個元素的析構函式沒有被呼叫 如果 的析構函式裡面有記...