C++ 派生类对象的构造与析构过程
因为基类的成员变量和派生类的成员变量在内存中的连续的(下面程序会验证这一点),如下图所示:
所以构造派生类对象的时候,构造成员变量的过程就像入栈一样:
那么很自然,派生类对象析构的时候就是出栈的过程,先进后出,后进先出:
下边一个简单的程序验证这个结论:
#include <iostream>
using namespace std;
class base{
int a;
public:
base(const int& a):a(a){cout<<"基类构造函数
";}
void showAdd(){ cout<<"base类成员a的地址: "<<hex<<&a<<endl; }
~base(){cout<<"基类析构
";}
};
class sub : public base {
int b;
public:
sub(const int& a, const int& b):base(a), b(b){cout<<"派生构造函数
";}
void showAdd() {base::showAdd(); cout<<"sub类成员变量b的地址: "<<hex<<&b<<endl; }
~sub(){cout<<"派生类析构
";}
};
int main(){
sub b(1,2);
b.showAdd();
return 0;
}
/*
输出结果:
基类构造函数
派生构造函数
base类成员a的地址: 0x7fffffffdb60
sub类成员变量b的地址: 0x7fffffffdb64
派生类析构
基类析构
*/