码迷,mamicode.com
首页 > 其他好文 > 详细

内存管理——array new,array delete

时间:2019-12-16 13:06:11      阅读:87      评论:0      收藏:0      [点我收藏+]

标签:自己   inf   int   析构函数   而不是   http   数据类型   内存   内存区域   

1.array new

array new就是申请一个数组空间,所以在delete的时候一定不能忘记在delete前加[]

技术图片

 

 delete加上[]符号以后,就相当于告诉系统“我这里是数组对象,记得全部回收”,因此析构函数会被调用三次,在new array也一样,它会调用三次构造函数。

一旦忘记[]符号以后,在析构时会造成内存泄漏,这里泄漏是指对象本身内部的数据空间,而不是指指向对象内存区域的指针。

技术图片

 

 在VC6下,申请数组空间时会多出一些空间来记录数组的大小,然后在申请好内存之后,这片区域的大小还会被调整为16的倍数。

技术图片

 

 这里的delete不需要加[](加上也不会出错),因为int是基础数据类型,它自己并没有析构函数,加或不加[]并没有实际意义。

若数组中放的是object,则必须加[],不然在编译的时候会出错,在申请object数组空间时,内存区块会记录下数组元素个数(下图右侧的3),若在析构时没有加[],free在释放时会认为这块内存是一个对象,但是它进行实际解析时却首先发现了3,这导致它解析出错,所以编译不能通过。

技术图片

 

 

内存管理——array new,array delete

标签:自己   inf   int   析构函数   而不是   http   数据类型   内存   内存区域   

原文地址:https://www.cnblogs.com/area-h-p/p/12048485.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!