C++类构造顺序问询:基类A、B构造函数还是A实例先执行?
构造执行顺序详解:创建B类对象X时的流程
当你创建B类对象X时,构造的执行顺序是严格遵循C++标准规定的,具体顺序如下:
第一步:执行基类
A的默认构造函数
这是C++继承体系的核心规则之一——派生类对象构造时,必须先确保基类子对象完全初始化,这样派生类后续的操作才能安全依赖基类的成员和行为。第二步:执行
B类成员变量mInstanceOfA的默认构造函数
类的所有非静态成员变量,都会在构造函数体执行之前完成初始化,顺序和它们在类声明中的顺序一致(注意,和构造函数初始化列表的顺序无关)。第三步:执行
B类自身构造函数体中的代码
到这一步,基类和所有成员变量都已经初始化完毕,构造函数体里的代码可以安全地使用这些资源了。
实际运行输出验证
运行你提供的代码,控制台会依次输出以下内容:
A ctor A ctor B ctor
第一个A ctor对应基类A的构造,第二个是成员mInstanceOfA的构造,最后一行是B构造函数体的输出。
额外补充
如果基类需要带参数的构造,或者成员变量需要自定义初始化逻辑,你可以通过构造函数初始化列表来指定,比如:
B(int val) : A(val), mInstanceOfA(anotherAObj) { cout << "B ctor with param" << endl; }
但要注意:不管有没有显式写初始化列表,基类构造的优先级永远高于成员变量构造,最后才是构造函数体的执行——这个顺序是C++标准硬性规定的,不会被初始化列表的顺序改变。
内容的提问来源于stack exchange,提问作者ZAX9732
相关产品推荐
相关产品推荐

