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

斯蒂芬·伯格(Stefan Berger)

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

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

这是来自c ++参考的内容:

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

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

编辑:似乎没有什么我可以做的。检查了另一块板,并获得了使用内存分配器的建议,这对于我的内存泄漏检测器来说是过高的,和/或研究valgrind的工作方式。我可能会做后者。

詹姆斯·坎泽

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在赋值运算符之前调用的结构的析构函数

来自分类Dev

如何在移动分配运算符中调用析构函数?

来自分类Dev

您是否在C ++中的析构函数中调用delete?

来自分类Dev

来自libc ++的istringstream析构函数中对运算符delete的未定义引用

来自分类Dev

在C ++中,当delete调用析构函数时,析构函数的主体是否在释放内存之前触发?

来自分类Dev

delete []是否调用析构函数?

来自分类Dev

使用delete调用析构函数

来自分类Dev

从赋值运算符调用析构函数是否有任何意外的后果?

来自分类Dev

为什么std :: shared_ptr从基类和派生类中调用析构函数,而delete仅从基类中调用析构函数?

来自分类Dev

重载delete []运算符,以允许使用析构函数缩小类型的数组

来自分类Dev

何时使用:类析构函数或删除运算符

来自分类Dev

类析构函数导致重载+运算符的问题

来自分类Dev

基于策略的类中的策略转换运算符与私有析构函数

来自分类Dev

在派生类中定义析构函数需要复制赋值运算符

来自分类Dev

在C ++中调用delete时是否可以阻止析构函数运行?

来自分类Dev

取消分配由全局替换运算符new返回的指针而不调用替换运算符delete的未定义行为?(C ++ 17)

来自分类Dev

复制构造函数,赋值运算符和析构函数代码重复

来自分类Dev

如果我还使用复制构造函数和重载=运算符,是否需要析构函数?

来自分类Dev

std :: swap在构造函数,赋值运算符和析构函数方面如何工作?

来自分类Dev

具有虚拟和非虚拟析构函数的删除运算符的不同行为

来自分类Dev

调用对象的析构函数是否等效于对该对象调用delete?

来自分类Dev

当包含它的对象调用其析构函数时,unique_ptr是否会取消分配?

来自分类Dev

C ++中的delete和free之间有什么区别,而C ++的默认析构函数调用了哪一个?

来自分类Dev

析构函数调用

来自分类Dev

具有复制构造函数,平凡的赋值运算符和平凡的析构函数的动态大小的文本对象

来自分类Dev

使用shared_ptr时需要实现析构函数,复制构造函数,赋值运算符

来自分类Dev

C ++中的析构函数直接调用

来自分类Dev

从列表中调用元素的析构函数

来自分类Dev

析构函数在C ++中调用向量

Related 相关文章

  1. 1

    在赋值运算符之前调用的结构的析构函数

  2. 2

    如何在移动分配运算符中调用析构函数?

  3. 3

    您是否在C ++中的析构函数中调用delete?

  4. 4

    来自libc ++的istringstream析构函数中对运算符delete的未定义引用

  5. 5

    在C ++中,当delete调用析构函数时,析构函数的主体是否在释放内存之前触发?

  6. 6

    delete []是否调用析构函数?

  7. 7

    使用delete调用析构函数

  8. 8

    从赋值运算符调用析构函数是否有任何意外的后果?

  9. 9

    为什么std :: shared_ptr从基类和派生类中调用析构函数,而delete仅从基类中调用析构函数?

  10. 10

    重载delete []运算符,以允许使用析构函数缩小类型的数组

  11. 11

    何时使用:类析构函数或删除运算符

  12. 12

    类析构函数导致重载+运算符的问题

  13. 13

    基于策略的类中的策略转换运算符与私有析构函数

  14. 14

    在派生类中定义析构函数需要复制赋值运算符

  15. 15

    在C ++中调用delete时是否可以阻止析构函数运行?

  16. 16

    取消分配由全局替换运算符new返回的指针而不调用替换运算符delete的未定义行为?(C ++ 17)

  17. 17

    复制构造函数,赋值运算符和析构函数代码重复

  18. 18

    如果我还使用复制构造函数和重载=运算符,是否需要析构函数?

  19. 19

    std :: swap在构造函数,赋值运算符和析构函数方面如何工作?

  20. 20

    具有虚拟和非虚拟析构函数的删除运算符的不同行为

  21. 21

    调用对象的析构函数是否等效于对该对象调用delete?

  22. 22

    当包含它的对象调用其析构函数时,unique_ptr是否会取消分配?

  23. 23

    C ++中的delete和free之间有什么区别,而C ++的默认析构函数调用了哪一个?

  24. 24

    析构函数调用

  25. 25

    具有复制构造函数,平凡的赋值运算符和平凡的析构函数的动态大小的文本对象

  26. 26

    使用shared_ptr时需要实现析构函数,复制构造函数,赋值运算符

  27. 27

    C ++中的析构函数直接调用

  28. 28

    从列表中调用元素的析构函数

  29. 29

    析构函数在C ++中调用向量

热门标签

归档