这样做有什么区别:
int* I = new int[100];
for (int J = 0; J < 100; ++J)
{
delete I++;
}
//and
int* I = new int[100];
delete[] I;我知道第一个是错的。我知道如何正确地使用delete[]和delete。我只想知道为什么这些不一样。比如在循环中找出delete[]和delete之间的真正区别。那有什么区别呢?
发布于 2013-09-20 18:25:49
new和delete的两个版本各有两个任务:分配/解除分配和构造/销毁。
new将分配内存并调用构造函数。delete将调用解构函数并释放内存。new []分配单个内存块,然后可能多次调用构造函数。delete []可能多次调用解构函数,然后释放单个内存块。因此,多次使用delete意味着释放多个内存块,而使用delete[]将释放单个内存块;多次使用delete并不等同于使用delete []。
发布于 2013-09-20 18:08:53
区别在于,在第一种情况下,您要删除没有从new返回的指针。
发布于 2013-09-20 18:11:26
没有比较的意义
对所有的deletes使用news
以及适用于所有delete []的new []s
第一个简单地删除不来自new的指针。
https://stackoverflow.com/questions/18923106
复制相似问题