class A
{
private:
char *str;
int len;
public:
A(){ str = new char[len]; }
~A() { delete [] str; }
};
A *a = new A[10];
delete a; //1
delete [] a;//2
int *b=new int[10];
delete b;//3
delete []b;//4
delete的时候会调用类的析构函数,因为内置类型没有析构函数,可以直接知道其内存分配,所以3,4没有错误,但是自定义类,因为有可能在类中有new的出现,所以类在删除之前需要delete类中new的内存,而delete a只调用A[0]的析构函数,以至于其余9个的析构函数无法执行,则类中分配的内存会被永久占用,所以1 是错误的写法。