取消运算符delete[]中的析构函数调用



我正在编写一个内存泄漏检测器,它创建了一个带有一些警告的文本文件。例如,当使用delete而不是delete[]来释放使用new[]分配的内存时,它会生成警告。

当在用new创建的对象上使用delete[]时,我发现困难是相同的,反之亦然。在这种情况下,析构函数是为许多从未构造过的对象调用的。

以下是c++参考中的内容:

delete[]是一个具有特定行为的运算符:表达式使用delete[]运算符,首先调用相应的析构函数对于数组中的每个元素(如果这些元素属于类类型)。。。

我的问题是,我能做点什么吗?为尚未实际创建的对象调用析构函数通常会导致segfault。我想以某种方式"捕捉"它,取消对数组的删除并创建一个警告。

编辑:我似乎无能为力。查看了另一块板,得到了使用内存分配器的建议,这对我的内存泄漏检测器来说太过分了,和/或研究valgrind是如何工作的。我可能会做后者。

您可能什么都做不了,因为如果客户端代码调用delete,当运算符new为new []时,您可能不会在delete运算符中收到相同的地址。

最新更新