在多级继承中调用析构函数(C ++)

哈尼·高特(Hani Gotc)

我对以下类进行了编码,以测试多级继承概念。有一点我在尝试测试对构造函数和析构函数的调用时并不十分了解。


#include <iostream>

using namespace std;

class X{

    public:
        X(){cout <<"Construct X " << endl;};
        virtual ~X(){cout <<"Destruct X " << endl;};
        virtual void print() const = 0;
};

class Y: public X{
    public:
        Y(){cout <<"construct Y " << endl;};
        ~Y(){cout <<"Destruct Y " << endl;};
        void print() const{
            cout <<"print Y" << endl;
        };
};

class Z: public Y{
    public:
        Z(){cout <<"Construct Z" << endl; };
        ~Z(){cout <<"Destruct Z " << endl; };
        void print() const{
            cout <<" Print Z" << endl;
        };
};

int main()
{
    Y y;
    //Why isn't Y being destructed in here
    Z z;
    return 0;
}

输出量

输出如下。我知道我们是从基层开始的因此,在Y y;第一个X的构造函数被调用,那么ÿZ z;第一个X的结构被调用,那么ÿ终于ž

Construct X
construct Y
Construct X
construct Y
Construct Z
Destruct Z
Destruct Y
Destruct X
Destruct Y
Destruct X

  • 为什么不立即调用Y的析构函数Y y;为什么我们要等到Z构造好之后再调用析构函数。意思是为什么输出看起来不是这样:

    Construct X
    construct Y
    Destruct Y
    Destruct X
    Construct X
    construct Y
    Construct Z
    Destruct Z
    Destruct Y
    Destruct X
    
拔示巴

继承在这里是一条红鲱鱼。没关系

yz具有自动存储时间,在这种情况下,必须保持作用范围,直到该功能的大括号为止。

并且z会被破坏之前 y(在其他所有条件相同的情况下,自动变量会按照创建它们的相反顺序超出范围。)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章