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]的析构函数都调用一遍,彻底释放内存。

posted @ 2021-04-22 11:14  mshentai  阅读(208)  评论(0编辑  收藏  举报