对于普通的类似于int *a=new int[10]这种类型申请内存的方式,由于程序已经在申请的同时记住了指针a指向的内存大小,所以delete a和delete[] a均可以释放a指向的内存。但是对于:
class A
{
private:
char *m_cBuffer;
int m_nLen;
public:
A(){ m_cBuffer = new char[m_nLen]; }
~A() { delete [] m_cBuffer; }
};
A *a = new A[10];
这种用类来建立对象的操作, delete a也可以将a指向的所有对象内存空间释放,但是却只执行了a[0]的析构函数,将对象中m_cBuffer指向的内存空间释放,其余9个对象内的指针依然存在,造成了内存泄漏,所以delete[]在此时发挥了作用,可以释放a指向的内存空间同时,执行所有对象的析构函数。