這是一個嘮叨我一段時間的問題。我一直認爲應該設計C++,以便即使使用「new []」運算符,「刪除」運算符(無括號)也能工作。爲什麼我們甚至需要「delete []」運算符?
在我看來,寫這個:
int* p = new int;
應相當於分配1個元素的數組:
int* p = new int[1];
如果這是真的,「刪除」操作者總是可以刪除數組,而我們不需要「delete []」運算符。
爲什麼在C++中引入「delete []」運算符有什麼原因嗎?我能想到的唯一原因是分配數組的內存佔用量很小(您必須將數組大小存儲在某處),因此區分「delete」和「delete []」是一個小內存優化。
實際上,當你使用new int [1]時,它在第一個數據之前存儲在數組的頭部,它的大小。因此,使用delete而不是delete []不會釋放該部分內存。 – Rodrigo 2009-04-24 13:35:03