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...