提及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