C++中delete和delete的区别

 我来答
山东中公优就业
2017-08-07 · TA获得超过1511个赞
知道小有建树答主
回答量:907
采纳率:88%
帮助的人:212万
展开全部

两者之间区别的通俗理解是,delete是释放一个单位的堆空间,而delete是删除多个单位堆空间。

比如

int *p1=new int;//释放p1使用delete p1;或者delete[]p1;都是可以的,表示释放1*sizeof(int)个堆空间。

int *p2=new int[10];//如果需要完全释放首地址为p2的堆空间,需要使用delete[]p2;,顺便说一下,delete p2;的结果是p2开始int长度的堆空间被释放,剩下的9*sizeof(int);个堆空间仍然留着。

PS:实际尝试下来(比如VS 2013编译器),针对比如int[],char[]之类的简单数组,delete与delete[]效果完全相同,但是遇到释放class或者struct类型动态空间时候,却会产生不同结果。比如

这时候delete p与delete[]p会产生不同结果,前者会直接报错。

感觉是delete[]比delete更加“细心”,也就是delete仅仅停留在表面,而delete[]不但会逐个释放第一层t为首的堆空间,而且在释放前还会读取此空间上存放的地址,进入实体类对象的空间,因此会调用类内的析构函数。

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式