delete[] 对象数组 [英] delete[] an array of objects

查看:20
本文介绍了delete[] 对象数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经分配了对象数组

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆