记住基本原则:new申请的内存,释放时用delete,使用new [ ]申请的内存释放时要用delete [ ]。
下面解释原因:
假设通过new申请了一个对象数组,注意是对象数组,返回一个指针,对于此对象数组的内存释放,需要做两件事情:一是释放最初申请的那部分空间,二是调用析构函数完成清理工作。对于内存空间的清理,由于申请时记录了其大小,因此无论使用delete还是delete[ ]都能将这片空间完整释放,而问题就出在析构函数的调用上,当使用delete时,仅仅调用了对象数组中第一个对象的析构函数,而使用delete [ ]的话,将会逐个调用析构函数。
既然都能释放内存空间,为什么还要多此一举使用delete[]调用析构函数呢,因为有些类会占用系统资源,比如端口、文件等,不释放的话其它程序将无法使用。
对于基本数据类型而言(int/char/long/int*),没有析构函数(也不会占用系统资源),所以调用delete和delete[]的效果一样,但为了养成良好的使用习惯,还是要遵守基本原则。