现在的位置: 首页 > 综合 > 正文

用C++模板来展示new与delete操作符原理

2017年12月17日 ⁄ 综合 ⁄ 共 2539字 ⁄ 字号 评论关闭

C++中的new与delete可以认为是C中的malloc与free的升级版本。

new包含两部分,一部分是与malloc功能相同,是从堆上面申请内存块,第二部是调用类的构造方法来初始化刚申请的内存。

delete是new的逆过程,先调用类的析构方法来反初始化,再把刚申请的内存还给堆。

new [] 与delete []是针对数组操作符,要注意是通过new []分配的对象,不能用delete来释放对象,否则会有内存泄漏。当然通过new分配的对象,不能用delete[]来释放对象。后面我会通过代码来说明为什么。

 

下面是C++ 中的new与delete函数原型,申请内存失败会抛出异常bad_alloc

 

 

 使用举例

 

 

 终于到了用模板来模拟new与delete操作符,代码中有注释说明,其中对于调用类的构造方法,采用一种C++标准中称作in-place construtor的方式。使用原型为T* = new(pbuff) T(),直译的话就是在pbuff这块内存构造T类,而不用再去堆上面申请内存。这种技巧大量应用在对象池的实现中,即pbuff这块内存可以挂在链表中反复地使用(这里先不展开说了)。

 

 

 测试代码

 

 

 

 Note:测试环境为eclipse+cdt+ubuntu+gcc,注意头文件需要#include <new>,使用#include <stdlib.h>会导致编译不过,因为in-place construtor是C++中的新玩意。

抱歉!评论已关闭.