因此,在代碼審查期間,我的同事使用double* d = new double[foo];
,然後調用delete d
。我告訴他們,他們應該將其更改爲delete [] d
。他們表示,編譯器不需要基本的數據類型。我不同意。是刪除和刪除基本數據類型的[]等效
所以我想我會證明我的觀點有一個實驗:
#define NUM_VALUES 10000
int main(int argc,char** argv)
{
int i = 0;
while (true)
{
std::cout << i << "|";
double* d = new double[NUM_VALUES];
std::cout << ((void*)d) << std::endl;
for (int j = 0; j < NUM_VALUES; j++)
d[j] = j;
delete d;
i++;
}
return 0;
}
不僅內存使用量沒有增長,但d被分配到每一個時間同一個地方! (Visual Studio 2010)。這是一個Visual Studio編譯器的怪癖嗎?或者這是標準的一部分?
你的同事是錯的,他應該感覺不好。 – 2013-11-21 16:45:31
[刪除vs刪除\ [\]](http://stackoverflow.com/questions/4255598/delete-vs-delete) – andre
可能的重複[是刪除\ [\]等於刪除?](http ://堆棧溢出。com/questions/1553382/is-delete-equal-to-delete) – Angew