Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在不使用虚拟析构函数的情况下删除继承的对象时中止_C++_Inheritance - Fatal编程技术网

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

C++ 在不使用虚拟析构函数的情况下删除继承的对象时中止,c++,inheritance,C++,Inheritance,给我一个错误(中止),尽管如果我删除虚拟继承,它仍然有效。 我知道在没有虚拟析构函数的情况下制造这样的东西是不对的, 但是为什么只有在我使用虚拟继承时才会出现此错误?无论继承是否为虚拟继承,在这两种情况下,删除都是未定义的行为 超类必须有一个虚拟析构函数,以便能够使用指向超类的指针执行删除 仅仅因为您的代码的一个变体在您的平台上工作,并不意味着这两个变体都是有效的。事实并非如此。将析构函数更改为虚拟析构函数,无论继承是否为虚拟的,这都应该有效。无论继承是否为虚拟的,删除都是未定义的行为 超类必须

给我一个错误(中止),尽管如果我删除虚拟继承,它仍然有效。 我知道在没有虚拟析构函数的情况下制造这样的东西是不对的,
但是为什么只有在我使用虚拟继承时才会出现此错误?

无论继承是否为虚拟继承,在这两种情况下,删除都是未定义的行为

超类必须有一个虚拟析构函数,以便能够使用指向超类的指针执行删除


仅仅因为您的代码的一个变体在您的平台上工作,并不意味着这两个变体都是有效的。事实并非如此。将析构函数更改为虚拟析构函数,无论继承是否为虚拟的,这都应该有效。

无论继承是否为虚拟的,删除都是未定义的行为

超类必须有一个虚拟析构函数,以便能够使用指向超类的指针执行删除

仅仅因为您的代码的一个变体在您的平台上工作,并不意味着这两个变体都是有效的。事实并非如此。将析构函数更改为虚拟析构函数,无论继承是否为虚拟的,这都应该有效

class a
{
public : ~a() { cout << "a"; };
};
class b :virtual public a
{
public : ~b() { cout << "b"; };
};
a* p = new b;
delete p;