基于策略模式定制new和delete.docVIP

  • 3
  • 0
  • 约 5页
  • 2017-08-29 发布于安徽
  • 举报
背景 在面向对象类的设计中,有时为了强化效能,特别是当构造大量小对象时,为了改善内存碎片,就需要自己实现对象的内存管理,以替换系统缺省的分配和释放行为,即全局的new和delete。按照c++标准,在定制类专属的new和delete时,为了减免客户代码使用时的麻烦和问题,需要考虑同时定制简单(normal new)、定位(placement new)和无异常(nothrow new)三种new情形,以及与之配对的三种delete情形,另外还有对应的数组new[]和delete[]各三种情形。在接口设计上,每种情形都是operator new和operator delete的重载版本;在内存管理上,具体的对象空间分配和释放是灵活的,因此这一部分可实现为策略模式,通过改变替换不同的内存管理策略,即可轻易获得不同的内存分配和释放行为,而类的代码则无须改变。为了方便定制类的new和delete,可以从一个接口基类模板继承而自动获得这种特性。这个基类模板实现了单个对象的new、delete和对象数组的new、delete,而模板参数正是内存管理策略类,它的设计约束如下: 1)必须存在static成员方法malloc和free,其参数和返回值与C库的malloc和free一致。 2)malloc只分配空间,若分配成功则不必初始化,否则失败返回NULL,不能抛出异常,因为nor

文档评论(0)

1亿VIP精品文档

相关文档