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

类的成员对象是否仅当类构造函数被调用时才构造?两类实例解析

C++类成员构造时机与初始化方式解析

MyClass 实例 mc 的构造过程

  • 类的成员变量str会在MyClass构造函数体执行之前完成构造,属于mc实例构造流程的一部分,并非等mc完全构造完成后才创建str。
  • 这里使用初始化列表: str(s),本质是直接调用std::string的拷贝构造函数,用传入的参数s直接初始化str,一步完成成员的构造与赋值。

MyClass2 实例 mc2 的构造过程

  • 成员变量str同样在MyClass2构造函数体执行前被构造,但此时是调用std::string的无参默认构造函数,先创建一个空的字符串对象。
  • 进入构造函数体后执行str = s,这是对已经存在的str对象执行拷贝赋值操作(调用std::string的拷贝赋值运算符),属于对已构造成员的二次修改。

核心结论

不管使用初始化列表还是构造函数体内赋值,类的成员变量都会在类实例构造的过程中(构造函数体执行阶段之前)完成构造。两者的核心差异在于:

  • 初始化列表:直接用指定参数完成成员的构造,效率更高(避免默认构造+赋值的两步操作)。
  • 构造函数体赋值:先默认构造成员,再执行赋值操作,多了一次额外的对象操作。

内容的提问来源于stack exchange,提问作者Engineer999

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 15:13:13