c++ - 在 operator delete[] 中取消析构函数调用

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

我正在编写一个内存泄漏检测器,它创建一个带有一些警告的文本​​文件。例如,当使用 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/

相关文章:

c++ - 使用 imread 打开具有 unicode 名称的图像文件

c++ - 在 C++11 中使用 std::sort 和 lambda 函数对动态分配的多维 C 数组进行排序

c++ - std::endl 不适用于重载的运算符<<,尽管实现了专用的非模板函数

c++ - 为什么我不能用非引用返回类型定义 operator=?

c++ - 错误 C4716 : 'operator<<' : must return a value

c++ - 类的链接列表,如何在遍历时调用toString?

JavaScript 导致大量内存泄漏

c++ - 对类使用 sizeof

c++ - 即使 valgrind 没有显示内存泄漏,我是否应该在 c++11 的析构函数中清除 unique_ptr 的 vector

c++ - 使用 C++ 确定可执行文件的路径