无法理解析构函数调用序列

gui*_*eek 0 c++ inheritance destructor

class base{
    public:
        ~base(){
             cout<<"base class delete"<<endl;
        }   
};

class derived:public base{
    public:
        ~derived(){
            cout<<"derived class 1 delete"<<endl; 
        }
};

class derived2:public base,public derived{
    public:
        ~derived2(){
            cout<<"derived class 2 delete"<<endl;
        }
};

int main(){
    derived2 h; 
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

产生的输出是:

派生类2删除
派生类1删除
基类删除
基类删除

我知道析构函数是以构造函数的相反顺序调用的,但是我无法理解这个输出.任何人都可以解释这种行为吗?

qua*_*dev 5

1)从最派生到基数的相反顺序调用析构函数.

2)每个非虚基类的销毁按其声明的相反顺序完成

所以在你的情况下:

我们从a开始derived2,去它最后声明的base(derived)来销毁它(derived然后摧毁它base),然后再回来摧毁另一个基地,就是这样base.

有关更多详细信息和虚拟基础的一般情况,另请参阅此FAQ条目.