C++ 的delete和delete[]的区别
对于简单类型,如int、char、float等的没有析构函数的类型,在申请动态数组时,
char* a = new char[10];
delete a;
和
char* a = new char[10];
delete [] a;
之间的并没有区别。
但是对于复杂类型,即类型里申请了动态内存,需要在创建析构函数释放动态内存的类型,在对这种类型申请动态数组时,
设A为这种复杂类型。
A* a = new A[10];
delete a;
和
A* a = new A[10];
delete a;
之间的就有区别了。
delete a;和delete []a;都会释放该指针所指的空间;
但是delete a;只会调用a[0]的析构函数,导致a[1]~a[9]内申请的动态内存无法释放。
而delete []a;则会将a[0]~a[9]的析构函数都调用一遍,彻底释放内存。