C++ 派生类对象的构造与析构过程

C++ 派生类对象的构造与析构过程

因为基类的成员变量和派生类的成员变量在内存中的连续的(下面程序会验证这一点),如下图所示:

所以构造派生类对象的时候,构造成员变量的过程就像入栈一样:

那么很自然,派生类对象析构的时候就是出栈的过程,先进后出,后进先出:

下边一个简单的程序验证这个结论:

#include <iostream>
using namespace std;

class base{
    int a;
public:
    base(const int& a):a(a){cout<<"基类构造函数\n";}
    void showAdd(){ cout<<"base类成员a的地址:\t"<<hex<<&a<<endl; }
    ~base(){cout<<"基类析构\n";}
};

class sub : public base {
    int b;
public:
    sub(const int& a, const int& b):base(a), b(b){cout<<"派生构造函数\n";}
    void showAdd() {base::showAdd(); cout<<"sub类成员变量b的地址:\t"<<hex<<&b<<endl; }
    ~sub(){cout<<"派生类析构\n";}
};

int main(){
    sub b(1,2);
    b.showAdd();
    return 0;
}
/*
输出结果:
基类构造函数
派生构造函数
base类成员a的地址:     0x7fffffffdb60
sub类成员变量b的地址:  0x7fffffffdb64
派生类析构
基类析构
*/

猜你喜欢

转载自www.cnblogs.com/rookiezjz/p/12350623.html