c++之delete []

提及c++的delete操作,首先了解下malloc\free\new\delete的区别与联系:

1.malloc与free匹配使用、new与delete匹配使用,不可以混淆

2.new自适应类型,malloc需要强制转换;

3.new按类型进行分配,malloc需要指定内存大小;

4.申请的位置不同,new的内存从free store分配,而malloc的内存从heap分配;

5.malloc和new都申请空间,但是new是强类型的分配,调用对象的构造函数初始化对象,而malloc仅分配内存空间但是不初始化;

6.free的确释放了对象的内存,但是不调用对象的析构函数;delete不仅释放对象的内存,并且调用对象的析构函数

7.在delete内部仍调用了free,在对象中用free删除new创建的对象,内存就有可能泄露;


c++中[]这个奇怪语法之所以存在,是因为c++希望保持与C兼容的同时关注效率

c++系统不希望占用现有C系统的malloc函数,因此必须利用C的malloc直接实现new

c++库在释放数组时不一定清楚数组的大小,即使malloc把长度存储到某个位置上,而c++库也无法保证可移植性的前提下找到这个值;

c++的实现可能会提供另一个地方存储长度值,但需要用户告知被删除的是不是数组;



参考:http://hi.baidu.com/duyingjie/blog/item/86af3cfa1d51731aa9d3111d.html


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值