在不使用虚拟析构函数的情况下删除继承的对象时中止

阿姆·阿什拉夫(Amr Ashraf)
class a
{
public : ~a() { cout << "a"; };
};
class b :virtual public a
{
public : ~b() { cout << "b"; };
};

在这段代码中,当我尝试做类似的事情时:

a* p = new b;
delete p;

给我一个错误(中止),尽管如果我删除了虚拟继承,它也会起作用。我知道在没有虚拟析构函数的情况下进行类似的事情是不正确的,但是为什么仅当我使用虚拟继承时才会出现此错误?

山姆·瓦尔沙夫奇克

无论哪种继承,删除都是未定义的行为。

为了能够使用指向超类的指针执行删除,超类必须具有虚拟析构函数。

仅仅因为代码的一种变体可以在您的平台上运行,并不意味着任何一种变体都是有效的。它不是。将您的析构函数更改为虚拟析构函数,无论继承是否是虚拟的,这都应该起作用。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在非虚拟析构函数的情况下自动调用父析构函数?

来自分类Dev

在不运行全局静态对象的析构函数的情况下保留c ++应用程序

来自分类Dev

如何在不破坏move和copy构造函数的情况下声明虚拟析构函数

来自分类Dev

没有虚拟析构函数的继承

来自分类Dev

在没有复制删除的情况下,是否可以确保在析构函数之前调用复制/移动构造函数?

来自分类Dev

继承类的对象的析构函数执行

来自分类Dev

在没有先明确调用析构函数的情况下在旧对象上使用new放置危险吗?

来自分类Dev

没有虚拟析构函数的C ++继承

来自分类Dev

没有虚拟析构函数的C ++继承

来自分类Dev

是否可以在不使用exec,eval,compile的情况下从函数中删除外部对象引用(变量)?

来自分类Dev

如何在不调用析构函数的情况下使向量重新分配?

来自分类Dev

如何在不调用析构函数的情况下将值从std:optional中移出?

来自分类Dev

在不调用析构函数、复制或移动的情况下初始化(分配)内存

来自分类Dev

通过指向基的指针删除对象,而没有虚拟析构函数

来自分类Dev

了解虚拟析构函数

来自分类Dev

Swift:在不使用索引的情况下从阵列中删除有限数量的对象

来自分类Dev

在不使用ROW_NUMBER()函数的情况下删除重复的记录

来自分类Dev

如何在不使用strip()函数的情况下删除或剥离空格?

来自分类Dev

如何在不使用内置函数的情况下从python中的数组中删除元素

来自分类Dev

如何在不使用unity内置函数的情况下围绕对象旋转?

来自分类Dev

使用虚拟析构函数会产生错误

来自分类Dev

为什么要使用虚拟析构函数?

来自分类Dev

使用纯抽象析构函数从类继承

来自分类Dev

C ++继承类。将使用哪个析构函数?

来自分类Dev

在不使用on()的情况下删除动态添加的元素

来自分类Dev

在不使用额外数组的情况下删除重复字符

来自分类Dev

在不使用类名称空间的情况下声明对象

来自分类Dev

在不使用Serializable()的情况下将对象写入文件

来自分类Dev

C ++:使用析构函数在指针的静态向量中删除对象?

Related 相关文章

  1. 1

    在非虚拟析构函数的情况下自动调用父析构函数?

  2. 2

    在不运行全局静态对象的析构函数的情况下保留c ++应用程序

  3. 3

    如何在不破坏move和copy构造函数的情况下声明虚拟析构函数

  4. 4

    没有虚拟析构函数的继承

  5. 5

    在没有复制删除的情况下,是否可以确保在析构函数之前调用复制/移动构造函数?

  6. 6

    继承类的对象的析构函数执行

  7. 7

    在没有先明确调用析构函数的情况下在旧对象上使用new放置危险吗?

  8. 8

    没有虚拟析构函数的C ++继承

  9. 9

    没有虚拟析构函数的C ++继承

  10. 10

    是否可以在不使用exec,eval,compile的情况下从函数中删除外部对象引用(变量)?

  11. 11

    如何在不调用析构函数的情况下使向量重新分配?

  12. 12

    如何在不调用析构函数的情况下将值从std:optional中移出?

  13. 13

    在不调用析构函数、复制或移动的情况下初始化(分配)内存

  14. 14

    通过指向基的指针删除对象,而没有虚拟析构函数

  15. 15

    了解虚拟析构函数

  16. 16

    Swift:在不使用索引的情况下从阵列中删除有限数量的对象

  17. 17

    在不使用ROW_NUMBER()函数的情况下删除重复的记录

  18. 18

    如何在不使用strip()函数的情况下删除或剥离空格?

  19. 19

    如何在不使用内置函数的情况下从python中的数组中删除元素

  20. 20

    如何在不使用unity内置函数的情况下围绕对象旋转?

  21. 21

    使用虚拟析构函数会产生错误

  22. 22

    为什么要使用虚拟析构函数?

  23. 23

    使用纯抽象析构函数从类继承

  24. 24

    C ++继承类。将使用哪个析构函数?

  25. 25

    在不使用on()的情况下删除动态添加的元素

  26. 26

    在不使用额外数组的情况下删除重复字符

  27. 27

    在不使用类名称空间的情况下声明对象

  28. 28

    在不使用Serializable()的情况下将对象写入文件

  29. 29

    C ++:使用析构函数在指针的静态向量中删除对象?

热门标签

归档