构造函数执行顺序:基类成员初始化列表->基类构造函数体->派生类成员初始化列表->派生类构造函数体
析构函数执行顺序:派生类析构函数->派生类成员变量->基类析构函数->基类成员变量
构造的顺序与析构相反,注意成员初始化列表一定在函数体内的代码之前执行,执行顺序为成员变量在类中声明的顺序,和成员初始化列表中的顺序无关:
class Base {
public:
Base(int a, int b) : _b(b), _a(a) { cout << "Base\n"; }
private:
int _a;
int _b;
}; 执行顺序:
先是成员初始化列表:初始化_a,初始化_b,
然后是函数体:若有virtual函数,则先初始化vptr,然后执行用户代码cout << "Base\n";
main函数中,变量的释放顺序与定义的顺序相反,因此本题先析构b,再析构a
最终顺序为:
b:B的析构函数->A的析构函数(B中数据成员_a)->A的析构函数(子对象) a:A的析构函数(main中的a)
如何在 Minecraft 中复制地图 ▷➡️
信息公开