卫生间储物盒
delete加不加[]的区别
疑难件
delete是我们c++中的关键字,我们都知道它和new是配套使⽤的,有new就有delete不然会存在内存泄漏的问题。但是我们使⽤过delete的同学可能会发现delete有两种形式,⼀种是delete [],那这两个有什么区别呢?离子风机aryang
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后⾯的⽅括号主要是针对⾃定义类有区别。