這是使用delete []運算符的正確方法嗎?C++ delete []運算符
int* a=new int[size];
delete[] a;
如果是,誰(編譯或 GC或任何人)將確定新創建的數組的大小?它將在哪裏存儲數組大小?
感謝
這是使用delete []運算符的正確方法嗎?C++ delete []運算符
int* a=new int[size];
delete[] a;
如果是,誰(編譯或 GC或任何人)將確定新創建的數組的大小?它將在哪裏存儲數組大小?
感謝
對於分配的內存塊每一個,內存分配器存儲該塊的大小(這就是爲什麼它是低效相比,一大一例如分配許多小塊)。當刪除釋放內存時,分配器知道指針指向的內存塊有多大。
如果我分配了大於內存塊的大小,該怎麼辦?它會刪除僅指向的第一個內存塊嗎? – Betamoo 2010-04-28 09:49:00
@Betamoo:它會分配足夠的內存或拋出異常來表明它不能。所以你不能「免費少」 - 內存管理器將自行決定。 – sharptooth 2010-04-28 09:49:58
...當你調用delete []時,它也會調用適當數量的析構函數。 – 2010-04-28 11:19:02
順便說一句,每當你想寫new T[size]
,你應該使用std::vector<T>
來代替。使用局部指針指向動態數組,在拋出異常的情況下很難保證正確的內存釋放。
從技術上講,該用法是完全有效的。然而,像這樣的新數組通常是一個壞主意,你應該使用std :: vector。
這不是創建數組的正確方法,因爲您已將其分配給int,然後嘗試刪除int。它應該是int * a = new int [size]; – fingerprint211b 2010-04-28 09:41:31
對不起,我的錯誤.. – Betamoo 2010-04-28 09:44:13