面试题| C++中释放内存的方式有 delete 和 delete[] 两种,它们的区别是什么呢?

问题

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[]都可以正常释放,不会存在内存泄漏。原因是:分配这些基本数据类型时,其内存大小已经确定,系统可以记忆并且进行管理,在析构时不会调用析构函数,它通过指针可以直接获取实际分配的内存空间

 

おすすめ

転載: blog.csdn.net/weixin_54707168/article/details/120630532