C++中实例化单个对象时构造函数被调用两次的原因是什么
现象原因
你观察到两次构造函数调用,本质是代码实际上创建了两个不同的A类对象,并非单个对象调用了两次构造函数:
- 第一个对象是显式定义的变量
a:执行A a;时触发默认无参构造函数调用,输出第一行日志。 - 第二个对象是
A(10)生成的临时匿名对象:执行赋值语句a = A(10)时,会先创建这个临时对象,触发带参构造函数调用,输出第二行日志;之后编译器会调用默认生成的拷贝赋值运算符,将临时对象的内容覆盖到已存在的a对象上,赋值完成后临时对象会立即被析构。
如果你希望仅实例化一次对象、只调用一次带参构造,可以把初始化逻辑改成直接构造:
int main() { A a(10); // 直接调用带参构造初始化a,无额外临时对象生成 return 0; }
上述代码运行后仅会输出一行parameterized called,符合预期。
内容的提问来源于stack exchange,提问作者mada
相关产品推荐
相关产品推荐

