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

C++中实例化单个对象时构造函数被调用两次的原因是什么

现象原因

你观察到两次构造函数调用,本质是代码实际上创建了两个不同的A类对象,并非单个对象调用了两次构造函数:

  • 第一个对象是显式定义的变量a:执行A a;时触发默认无参构造函数调用,输出第一行日志。
  • 第二个对象是A(10)生成的临时匿名对象:执行赋值语句a = A(10)时,会先创建这个临时对象,触发带参构造函数调用,输出第二行日志;之后编译器会调用默认生成的拷贝赋值运算符,将临时对象的内容覆盖到已存在的a对象上,赋值完成后临时对象会立即被析构。

如果你希望仅实例化一次对象、只调用一次带参构造,可以把初始化逻辑改成直接构造:

int main()
{
    A a(10); // 直接调用带参构造初始化a,无额外临时对象生成
    return 0;
}

上述代码运行后仅会输出一行parameterized called,符合预期。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 17:54:03