第8章 实现简易的内存泄漏检测器

第7章中,探讨了重载内存分配操作符(即new、new[]、delete和delete[])的各种方法,旨在掌握编写这些操作符的语法规则及其在使用端代码中的应用。分析了这些操作符与异常处理的交互机制(即使是无异常版本),并解释了为何大多数情况下需要以四个或四的倍数为一组进行重载。例如,若仅重载无异常版本的operator new()而未重载常规版本,当代码通过nothrow版本获取指针pV后调用delete p时,两者可能因不兼容而迅速引发问题。

然而,我们尚未深入讨论自主控制这些操作符的实际收益。其应用场景其实非常丰富:追踪内存分配路径与位置、测量进程中的内存碎片、实施专项策略以优化分配/释放性能等。鉴于篇幅所限,我们无法穷尽所有可能性,仅选取一个典型案例,希望借此激发读者自主探索其他方案的灵感。

本章将实现一个简易但实用的内存泄漏检测器,具体分为以下步骤:

  1. 制定方案:概述检测器的工作原理及实现目标所需技巧;
  2. 初版实现:构建工具的首个版本,表面验证其可行性,并通过operator new()与operator delete()的调用链解析内存动态;
  3. 问题诊断:运用前文知识找出初版缺陷及改进方案;
  4. 最终优化:重构初始实现,形成简洁实用的生产级代码。

通过这个高度实践性的章节,将了解(或强化)以下关键技能:

让我们开始探索吧!