delete加不加[]的区别

卫生间储物盒
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后⾯的⽅括号主要是针对⾃定义类有区别。

本文发布于:2024-09-21 21:59:16,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/1/277472.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:释放   类型   对象   内存   数组   内置
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议