You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 07:34:59