delete只调用一次析构函数,delete[]会调用每一个成员的析构函数。在Effective c++中有更为详细的解释:当delete操作符用于数组时,它为每个数组元素调用析构函数,然后调用 operate delete释放内存。delete 与 new配套,delete[] 与 new[] 配套。
MemTest *mTest1=new MemTest[10];
MemTest *mTest2=new MemTest;
Int *pInt1=new int [10];
Int *pInt2=new int;
delete[]pInt1; //-1-
delete[]pInt2; //-2-
delete[]mTest1;//-3-
delete[]mTest2;//-4-
在-4-处报错,这就说明,在内建简单数据类型而言,delete 与delete[]的作用是相同的。对于自定义的复杂数据类型而言,delete 与 delete[]不能互用。delete[]删除一个数组,delete删除一个指针。简单来说:用new分配的内存用delete释放内存,用new[]分配的内存用delete[]删除。delete[]会调用数组成员的析构函数。内部数据类型没有析构函数,所以问题不大。如果在用delete时没有用括号,delete就会认为指向的是单个对象,反之,就会认为是指向的一个数组。