c++ 为什么析构函数必须声明为虚函数

来源:互联网 发布:ubuntu 传输文件 编辑:程序博客网 时间:2024/05/22 04:57
析构函数设为虚函数的作用:

解释:在类的继承中,如果基类不定义成虚函数,当有基类指针指向派生类, 那么delete基类指针时,只会调用基类的析构函数,不会调用派生类中派生类的析构函数。

如:

class Base{public:    Base(){cout<<"Base"<<endl;}    /*virtual*/ ~Base(){cout<<"~Base"<<endl;}};class Derive : public Base{public:    Derive(){cout<<"Derive"<<endl;}    virtual ~Derive(){cout<<"~Derive"<<endl;}};void testVirtualDestructor(){    Base *b = new Derive();    delete b;}int main(){    testVirtualDestructor();    return 0;}
执行结果:


当基类写成虚函数,执行结果:



阅读全文
0 0