2010-04-28 77 views
2

這是使用delete []運算符的正確方法嗎?C++ delete []運算符

int* a=new int[size]; 
delete[] a; 

如果是,誰(編譯 GC或任何人)將確定新創建的數組的大小?它將在哪裏存儲數組大小?

感謝

+0

這不是創建數組的正確方法,因爲您已將其分配給int,然後嘗試刪除int。它應該是int * a = new int [size]; – fingerprint211b 2010-04-28 09:41:31

+0

對不起,我的錯誤.. – Betamoo 2010-04-28 09:44:13

回答

2

對於分配的內存塊每一個,內存分配器存儲該塊的大小(這就是爲什麼它是低效相比,一大一例如分配許多小塊)。當刪除釋放內存時,分配器知道指針指向的內存塊有多大。

+0

如果我分配了大於內存塊的大小,該怎麼辦?它會刪除僅指向的第一個內存塊嗎? – Betamoo 2010-04-28 09:49:00

+0

@Betamoo:它會分配足夠的內存或拋出異常來表明它不能。所以你不能「免費少」 - 內存管理器將自行決定。 – sharptooth 2010-04-28 09:49:58

+1

...當你調用delete []時,它也會調用適當數量的析構函數。 – 2010-04-28 11:19:02

0

順便說一句,每當你想寫new T[size],你應該使用std::vector<T>來代替。使用局部指針指向動態數組,在拋出異常的情況下很難保證正確的內存釋放。

2

從技術上講,該用法是完全有效的。然而,像這樣的新數組通常是一個壞主意,你應該使用std :: vector。