构造函数执行顺序:基类成员初始化列表->基类构造函数体->派生类成员初始化列表->派生类构造函数体

析构函数执行顺序:派生类析构函数->派生类成员变量->基类析构函数->基类成员变量

构造的顺序与析构相反,注意成员初始化列表一定在函数体内的代码之前执行,执行顺序为成员变量在类中声明的顺序,和成员初始化列表中的顺序无关:

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 中复制地图 ▷➡️
信息公开