delete加不加[]的区别
delete是我们c++中的关键字,我们都知道它和new是配套使⽤的,有new就有delete不然会存在内存泄漏的问题。但是我们使⽤过delete的同学可能会发现delete有两种形式,⼀种是delete [],那这两个有什么区别呢?
1、delete 释放new分配的单个对象指针指向的内存
2、delete[] 释放new分配的对象数组指针指向的内存
3、delete处理单个类类型,先会调⽤析构函数,释放它所占资源,然后释放它所占内存空间。
truncate 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后⾯的⽅括号主要是针对⾃定义类有区别。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论