我在 gcc 4.4.5 上尝试了以下代码。
如果成员“数据”不存在,则代码可以正常执行,但如果存在,则会崩溃。当派生类的 dtor 不是虚拟的时,它也不会崩溃。
我知道在这两种情况下,行为都是未定义的,如 C++03 (5.3.5 / 3)中所列,但仍然有人可以向我提供一些解释,为什么它在后一种情况下会崩溃?
是的,我知道 UB 意味着任何事情都可能发生,但我仍然想知道特定于实现的细节。
#include<iostream>
using std::cout;
struct base{
int data;
base(){
cout << "ctor of base\n";
}
~base(){
cout << "dtor of base\n";
}
};
struct derived : base{
derived(){
cout << "ctor of derived\n";
}
virtual ~derived(){
cout << "dtor of derived\n";
}
};
int main(){
base *p = new derived;
delete p;
}