非常短的程序,我没有想明白原因
c++ 代码:
#include <iostream>
class Base1{
public:
virtual ~Base1(){}
};
class Base2{
public:
virtual void f()=0;
//virtual ~Base2(){}
};
class Derive: public Base1, public Base2{
public:
void f(){ std::cout<<"f\n"; }
~Derive(){ std::cout<<"Derive dtor\n"; }
};
void func(Base2* p){
p->f();
}
int main(int, char**){
Derive* p = new Derive;
Base1* pb1=p;
Base2* pb2=p;
func(p);
//delete p;
//delete pb1;
delete pb2;
}
我把Base2中的虚dtor干掉后,程序crash了,但是如果我把f一同干掉,又不crash
liuuuxin@WEIFANG ~/temp
$ g++ foo.cpp
liuuuxin@WEIFANG ~/temp
$ ./a
f
8 [sig] a 3292 _cygtls::handle_exceptions: Error while dumping state (prob
ably corrupted stack)
Segmentation fault (core dumped)
想不通道理了。