我正在学习ctors并且有几个问题。在这些行:C++对象创建和构造函数
Foo obj(args);
Foo obj2;
obj = Foo(args);
Foo obj3 = Foo(args);
第一部分:只有1称为构造(美孚)和obj
被初始化。所以,1个对象的创建。
第二部分:创建临时对象obj2
,为其调用默认ctor。接下来我们创建Foo
的另一个副本,并将其副本传递到operator=()
。是对的吗?所以,3个本地临时对象,2个构造函数调用。
第三部分:创建1个对象Foo
并将其副本传递到operator=()
。所以,2个临时对象和1个Ctor调用。
我理解这个权利吗?如果这是真的,编译器(例如最后的gcc)在常见情况下优化这些吗?
'operator =()'通常通过引用接收它的参数,所以在调用它时没有副本。 – rodrigo 2012-01-08 11:59:53
obj3实际上是使用复制构造函数而不是指定操作符创建的。 – 2012-01-08 11:59:56