首页 > 代码库 > 只有基类的析构函数需要为虚函数

只有基类的析构函数需要为虚函数

////  main.cpp//  TescDtor////  Created by Jiacan Li on 6/16/17.//  Copyright © 2017 Jiacan Li. All rights reserved.//#include <iostream>using namespace std;class ClxBase1{public:    ClxBase1()    {    }        virtual ~ClxBase1()    {        cout<<"~ClxBase1"<<endl;    }};class ClxBase2 : public ClxBase1{public:    ClxBase2()    {    }        ~ClxBase2()    {        cout<<"~ClxBase2"<<endl;    }};class ClxDerived : public ClxBase2{public:    ClxDerived()    {            }        ~ClxDerived()    {        cout << "~ClxDerived" << endl;    }};int main(int argc, const char * argv[]){    ClxBase1* cp = new ClxDerived();    delete cp;    int i = 0;}

将一个子类的对象赋值给父类指针,当删除该指针时,如果没有将基类的指针写为虚函数,那么只会调用基类的析构函数。

测试上面的代码:

1、ClxBase1* cp = new ClxDerived(); 当删除指针时,会打印三条Log;

2、ClxBase2* cp = new ClxDerived(); 当删除指针时,会打印三条Log;

可见,只要在根类上生命虚析构函数,则删除任意子类指针的时候,都会顺序调用继承树路径上的析构函数。

只有基类的析构函数需要为虚函数