C++中类类型数组如何释放

假设有如下代码:
class A
{
int a[10];
char b[10];
public:
A();
~A();
}
A ary[10];
delete ary[];
如上述代码,假如设置了一个关于类类型的数组,那么释放该数组时直接delete该数组可不可以达到完全释放所有内存的效果呢?还是必须设置一个循环,先依次显式调用ary数组里面每个A类对象的析构函数然后再delete该数组方可完全释放内存呢??

用delete []释放就可以了。

C++中对于不需要逐个析构的类型(本身的析构函数没有操作,并且所有基类和成员的析构函数都没有操作,称为trivally destructible)的对象数组,释放的时候单纯就是把整个数组占用的内存释放(这个时候用delete或者delete[]结果上都是一样的,但是不建议直接用delete)。而对于需要逐个析构的类型,在用new申请内存的时候就会额外记数组的尺寸,释放的时候必须使用delete []。delete []会先根据事先记录的数组尺寸调用每个元素的析构函数,然后再将内存释放。delete则只会调用第一个元素的析构函数。

另外,不建议直接使用裸指针。最好使用容器或者智能指针(动态数组的情况,应该用vector)
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2016-03-21
用new 创建的才用 delete 。不是用new创建的会自动调用析构函数。但是如果类的构造里用了new 创建其他数据,你必须在类的析构函数中调用delete来释放对应的数据。
但是,不管怎样,不能一次性释放数组中的元素。追问

那如果一个类A中有一个关于类B类型的数组,那么在A中的析构函数中应怎样书写才能把这个数组给释放掉呢?

追答

我觉得只要不是用new创建的,就不需要用delete。程序会自动调用B类的析构函数。

追问

好的 我试一下 谢谢。

本回答被提问者采纳
相似回答