在c 中,釋放new分配的記憶體空間時,使用delete和d

2021-03-27 09:12:02 字數 1352 閱讀 2522

1樓:匿名使用者

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 對應使用

2樓:匿名使用者

如果new得是一個變數,那麼使用delete就可以。

但是如果new得是一個陣列,使用delete的話只能釋放陣列的第一個元素佔用的記憶體,這會造成嚴重的記憶體洩漏的。

使用new申請的陣列應該使用delete來銷燬它。

3樓:匿名使用者

delete一般只釋放用new所分配的,並且只分一個型別的大小的記憶體,每個delete和new對應;而delete釋放用new所分配的,並且為同一種型別的多個元素一次所分配的記憶體。也就是用new一次為一個元素分配記憶體時,用delete;而用new一次為一個集合(陣列)分配記憶體時,用delete。如char *p=new char時用delete p;youclass *pclass=new youclass時用delete pclass;又如用char *p=char[10]時用delete p;youclass *pclass=new youclass[10]時用 delete *pclass;

4樓:匿名使用者

delete 是銷燬一個變數!delete 是銷燬一個變數陣列

c語言 malloc 函式 分配記憶體空間尺寸的問題

這個問題首先得從堆疊說起,一個程式一般分為三段 段,資料段 靜態資料 和堆疊段。堆疊段儲存程式中的變數 程式傳遞的引數等 動態分配的變數儲存在堆中,靜態分配的儲存在棧中 堆疊的增長方式如下 程式在執行的時候會預先分配堆疊空間,所以你的問題中不一定修改了不該修改的地方,有可能那裡本來就是空的。再回到m...

請教 C 中,在中new申請的記憶體用完不刪,會導致記憶體洩露嗎

先來進行分析抄一下 fucntion函式裡的 int p new int 100000 做的事情 1 申請了一 片記憶體int 100000 2 申請了了一個指標變數 p。同時p指向這片記憶體。在子函式結束以後,會做的事情 1 銷燬指標變數 p 注意 只是銷售了指標變數,並不會自動的 int 100...

c 中的new是否能夠開闢連續的空間

如果想建立一個陣列,可以通過new的方式申請連續的空間用於存放陣列。但是如果在同一時間內連續呼叫new函式,申請的空間不是連續的。比如new int 100 vc 屬於什麼程式語言 vc 是微軟出的用於編寫c 的開發工具,使用它自帶的mfc庫,可以很簡單方便的寫出windows,視窗之類的程式.vc...