delete加不加[]的区别
delete是我们c++中的关键字,我们都知道它和new是配套使用的,有new就有delete不然会存在内存泄漏的问题。但是我们使用过delete的同学可能会发现delete有两种形式,一种是delete [],那这两个有什么区别呢?
1、delete 释放new分配的单个对象指针指向的内存
2、delete[] 释放new分配的对象数组指针指向的内存
3、delete处理单个类类型,先会调用析构函数,释放它所占资源,然后释放它所占内存空间。
4、delete处理数组类类型的时候,会对每一个数组对象都调用它们的析构函数,然后再释放它们所占用的内存空间。所以对于类类型的数组如果不调用delete[],那就只调用了下标为0的对象的析构函数,可能会产生问题。
5、两个都会释放所占内存,对于内置类型不管是数组还是单个对象,都可以混用,没有关系,因为对于内置类型,它只干一件事,就是释放它们所占内存
6、如果对于单个类对象,delete和delete[]都可以,因为delete是知道它要释放多大空间的,加不加[]括号的区别是对不对每个对象调用析构函数,如果只有一个的话,它就调用一次,所以没有关系。
示例1:
int *p =new int;
delete p; //ok p指向了有一个int的内置类型大小的空间,delete直接释放了它。
//delete []p; ok
示例2:
int *p = new int [10](); //ok
delete p; //ok 内置类型不需要调用析构函数
delete [] p; //ok 效果和上面一样
示例3:
int *p =new A () ;
delete p; //ok
delete []p;//ok
示例4:
int *p =new A[10]();
delete p; //不行,只调用p[0]的析构函数
delete [] p; //可以,会调用构造函数
简而言之:delete后面的方括号主要是针对自定义类有区别。

浙公网安备 33010602011771号