delete[] 对象数组 [英] delete[] an array of objects
问题描述
我已经分配了对象数组
Objects *array = new Objects[N];
我应该如何删除这个数组?只是
How should I delete this array? Just
delete[] array;
还是迭代数组的元素?
for(int i=0;i<N;i++)
delete array[i];
delete[];
谢谢
更新:
我将循环体更改为
delete &array[i];
强制编译代码.
推荐答案
new
的每次使用都应该通过 delete
来平衡,并且每次使用 new[]
应该通过 delete[]
来平衡.
Every use of new
should be balanced by a delete
, and every use of new[]
should be balanced by delete[]
.
for(int i=0;i<N;i++)
delete array[i];
delete[] array;
这仅适用于将数组初始化为:
That would be appropriate only if you initialized the array as:
Objects **array = new Objects*[N];
for (int i = 0; i < N; i++) {
array[i] = new Object;
}
您的原始代码给您一个编译错误这一事实强烈暗示您做错了什么.
The fact that your original code gave you a compilation error is a strong hint that you're doing something wrong.
顺便说一句,强制性的:避免使用 new[]
分配数组;改用 std::vector
,然后它的析构函数会帮你清理.此外,如果抛出异常,它将不会泄漏内存,从而实现异常安全.
BTW, obligatory: avoid allocating arrays with new[]
; use std::vector
instead, and then its destructor will take care of cleanup for you. Additionally it will be exception-safe by not leaking memory if exceptions are thrown.
这篇关于delete[] 对象数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!