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

时间:2014-04-18 20:08:33

标签: c++ memory-leaks operator-overloading delete-operator

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

在使用delete[]创建的对象上使用new时,我发现难以解决的问题相同。在这种情况下,析构函数会被调用许多从未构造过的对象。

这里有来自c ++参考的东西:

  

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

我的问题是,我能为此做些什么吗?为析构函数调用实际上未创建的对象通常会导致段错误。我想以某种方式"赶上"它,取消删除数组并创建警告。

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

1 个答案:

答案 0 :(得分:1)

您可能无法执行任何操作,因为如果客户端代码调用delete,当运算符new为new []时,您可能不会在删除运算符中收到相同的地址。