我正在编写一个内存泄漏检测器,该检测器会创建带有一些警告的文本文件。例如,它在delete
使用时会发出警告,而不是delete[]
释放使用分配的内存new[]
。
当在使用delete[]
创建的对象上使用时,我发现同样困难,反之亦然new
。在这种情况下,析构函数将被调用以获取从未构造过的许多对象。
这是来自c ++参考的内容:
... delete []是一种具有非常特定行为的运算符:使用delete []运算符的表达式首先为数组中的每个元素调用适当的析构函数(如果它们属于类类型)...
我的问题是,我可以做些什么吗?为实际上尚未创建的对象调用析构函数通常会导致段错误。我想以某种方式“捕获”它,取消删除数组并创建警告。
编辑:似乎没有什么我可以做的。检查了另一块板,并获得了使用内存分配器的建议,这对于我的内存泄漏检测器来说是过高的,和/或研究valgrind的工作方式。我可能会做后者。
您可能什么也做不了,因为如果客户端代码调用delete
,当new运算符为时new []
,您可能不会在delete运算符中收到相同的地址。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句