问题
C++中释放内存的方式有 delete 和 delete[] 两种,它们的区别是什么呢?
区别
在C++ Primer的书中提到,delete用来释放new申请的动态内存,delete[]用来释放由new[]申请的动态内存,也就是说:
● delete释放new分配的单个对象指针指向的内存
● delete[]释放new分配的对象数组指针指向的内存
直接这样理解对吗?先看看下面这段代码:
int *a = new int[10];
delete a; //方式1
delete [] a; //方式2
事实上,上面两种释放内存的方式都是正确的,方式1并不会造成内存泄漏。这是为什么呢?因为在申请动态内存的时候,一般有两种情况:基本数据类型的分配和自定义数据类型的分配,两者在释放内存的时候略有不同。
基本数据类型
对于像 int/char/long 等等这些基本数据类型,使用new分配的不管是数组还是非数组形式的内存空间,delete和delete[]都可以正常释放,不会存在内存泄漏。原因是:分配这些基本数据类型时,其内存大小已经确定,系统可以记忆并且进行管理,在析构时不会调用析构函数,它通过指针可以直接获取实际分配的内存空间。