deleete和delete 的具體區別

2021-09-25 15:19:25 字數 1470 閱讀 8949

在c++中呢,用new申請的記憶體空間,它的釋放方式有 delete 和 delete 兩種方式,那麼這兩種方式到底有什麼區別呢?今天我們就談一下:

前幾天呢,我在書上看見過這樣的內容:

delete 釋放new分配的單個物件指標指向的記憶體

delete 釋放new分配的物件陣列指標指向的記憶體

對於這兩句話的理解,我們來分析一下底下的**,就知道了。

int *p=new int [10];

delete p;

delete [ ]p;

對於這兩種方式,應該有一些人會認為第一種方式會導致記憶體洩漏。(這種情況會出現嗎?)  答案是不會的。原因就是:

1>.對於簡單型別而言:使用new分配後的不管是陣列還是非陣列形式記憶體空間用這兩種方式釋放都是可以的。如:

int *p=new int [10];

delete p;

delete [ ]p;

此種情況下的這兩種釋放效果是相同的,並不會產生記憶體洩漏,主要原因在於:當我們進行分配簡單型別記憶體時,我們分配的記憶體大小就已經確定了,這樣系統可以記憶並且進行管理,在析構時,系統並不會呼叫析構函式,而它是直接通過指標可以獲取實際分配的記憶體空間。

2>.針對類class,這兩種方式體現出了具體差異 ,當你通過下列方式分配乙個類物件陣列:

class budle

~a()

private:

char *mc_namek;

int length;    

};int main()

{budle *str = new budle[10];

delete str;  

以上**中可以得到:delete str;  

//僅僅釋放了str指標指向的全部記憶體空間 但是只呼叫了str[0]物件的析構函式 剩下的從str[1]到str[9]這9個使用者自行分配的mc_namek對應記憶體空間將不能釋放 從而造成記憶體洩漏。

delete str;

//呼叫使用類物件的析構函式釋放使用者自己分配記憶體空間並且釋放了a指標指向的全部記憶體空間。

所以總結一下就是,如果str代表的是乙個用new申請的記憶體返回的記憶體空間位址,即所謂的指標,那麼:

對於像int/char/long/int*/struct等等簡單資料型別,由於物件沒有析構函式,所以用delete 和delete 是一樣的!但是如果是c++物件陣列就不同了!!!

delete   str   代表用來釋放記憶體,且只用來釋放str指向的記憶體。容易造成記憶體洩漏!! 

delete[ ]   str   用來釋放str指向的記憶體,!!還逐一呼叫陣列中每個物件的析構函式!!

以上就是我所總結的delete和delete[ ]的區別。如有錯誤請各位同仁進行指正。

delete和delete 的區別

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

delete和delete 的區別

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

delete 和 delete 的區別

情景 今天在檢視別人寫的 時發現有類似如下 printer info 4 info4 printer info 4是乙個普通的結構 即沒寫構造和析構等函式的純資料的struct info4 printer info 4 new byte dwneeded delete info4 好奇這一句的寫法,...