1樓:匿名使用者
這樣定義陣列的話是在棧上分配記憶體,超過作用域範圍的時候會自動釋放掉,使用new操作符分配的記憶體,是在堆上,需要使用delete釋放,因此如果像你那樣定義陣列的話,不必釋放記憶體
2樓:
用delete釋放的只能是用new動態分配的陣列空間,若陣列不是動態分配的則不能用delete釋放。
舉兩個例子詳細說明一下:
int a[100];
這個陣列a是不能用delete釋放空間的,因為這個陣列a在宣告時就已經說明了空間的大小,在最後程式會自動釋放這個空間。
int *b;
b=new int[100];
這個要在最後用delete b; 語句來動態釋放,因為陣列b是一個動態陣列,陣列空間是動態分配的,程式是不能自動釋放的,所以要自己用delete來釋放。
3樓:
不行運算子delete必須用於先前new分配的有效指標,如果用delete釋放的記憶體空間不是用new申請的,可能會引起程式執行錯誤。
char aa[100];
這樣定義的,不用手動釋放記憶體空間 。
如果是char *aa;
aa=new char[100];..
..delete aa;
4樓:皇家救星
只有通過new申請的記憶體塊才需要用delete釋放如char *p = new char[10];
要用delete p;釋放
而其它的不用(如lz舉的例子 char aa[100])
5樓:匿名使用者
可以的。
如果這個資料是在堆上分配的記憶體可以用 delete來釋放delete aa;
這樣就可以了。
6樓:
這樣定義的,不需要手動釋放,也不可以手動釋放,會出錯如果是這樣的才可以
char *aa;
aa=new char[100];
//...
delete aa;
在c++中,釋放new分配的記憶體空間時,使用delete和delete[]是不是有區別?詳細說明下
7樓:匿名使用者
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 對應使用
8樓:匿名使用者
如果new得是一個變數,那麼使用delete就可以。
但是如果new得是一個陣列,使用delete的話只能釋放陣列的第一個元素佔用的記憶體,這會造成嚴重的記憶體洩漏的。
使用new申請的陣列應該使用delete來銷燬它。
9樓:匿名使用者
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;
10樓:匿名使用者
delete 是銷燬一個變數!delete 是銷燬一個變數陣列