我正在编写一个内存泄漏检测器,它创建一个带有一些警告的文本文件。例如,当使用 delete
而不是 delete[]
来释放使用 new[]
分配的内存时,它会生成警告。
当对使用 new
创建的对象使用 delete[]
时,我发现困难的是同样的事情,反之亦然。在这种情况下,会为许多从未构造过的对象调用析构函数。
这是来自 c++ 引用的内容:
... delete[] is an operator with a very specific behavior: An expression with the delete[] operator, first calls the appropriate destructors for each element in the array (if these are of a class type) ...
我的问题是,我可以做些什么吗?为实际上尚未创建的对象调用析构函数通常会导致段错误。我想以某种方式“捕获”它,取消数组的删除并创建警告。
编辑:似乎我无能为力。检查了另一 block 板并得到了使用内存分配器的建议,这对我的内存泄漏检测器来说太过分了,和/或查看 valgrind 的运行方式。我可能会选择后者。
最佳答案
你可能什么也做不了,因为如果客户端代码调用delete
,当operator new是new []
时,你可能不会收到相同的删除运算符中的地址。
关于c++ - 在 operator delete[] 中取消析构函数调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23161509/