【发布时间】:2012-02-05 07:52:12
【问题描述】:
我现在正在学习ctors,有几个问题。在这些行:
Foo obj(args);
Foo obj2;
obj2 = Foo(args);
Foo obj3 = Foo(args);
第一部分:只有一个名为 (Foo) 和 obj 的构造函数被初始化。因此,创建了 1 个对象。
第二部分:创建临时对象obj2,为其调用默认ctor。下一行我们创建Foo 的另一个副本并将其副本传递给operator=()。那正确吗?所以,3 个本地临时对象,2 个构造函数调用。
第三部分:创建1个对象Foo并将其副本传递给operator=()。因此,有 2 个临时对象和 1 个 ctor 调用。
我理解对了吗?如果是真的,编译器(例如最后一个 gcc)会在常见情况下优化这些吗?
【问题讨论】:
-
operator=()通常通过引用接收它的参数,所以在调用它时没有副本。 -
obj3 实际上是使用复制构造函数而不是赋值运算符创建的。
标签: c++ object constructor