<分区>
做和做有什么区别:
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 之间的真正区别一样。那有什么区别呢?
标签 c++
<分区>
做和做有什么区别:
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 之间的真正区别一样。那有什么区别呢?
最佳答案
new
和 delete
的两个版本都有两个任务:分配/解除分配和构造/销毁。
new
将分配内存并调用构造函数。
delete
将调用解构函数并释放内存。
new []
分配单个内存块,然后可能多次调用构造函数。
delete []
可能多次调用解构函数,然后释放单个内存块。
因此,多次使用 delete
意味着释放多个内存块,而使用 delete[]
将释放单个内存块;多次使用 delete
不等同于使用 delete []
。
关于c++ - delete[] 与 for 循环中的 delete,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18923106/