我正在學習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