------
#先說明,回傳時通常傳參考就沒這些問題,故意這樣寫只是想搞懂
現在覺得C++好難= =,腦袋已經混亂了,求指點明晰
------
最近學到move constructor以後,看了看Rvalue的定義,試了下code,
發現VC++與G++的行為不同,下面有我寫的簡單的code,希望能得到解
答,如果不好回答,希望能有連結或關鍵字讓我查詢。
我猜可能是function return object沒學好,先舉例說明我的想法:
class A{
A& append(int value){
//...append value to A
return *this;
}
A(const A& a){
//...copy a to *this
}
}
A a;
A b = a.append(1);
以上面這行來說,會有兩個動作
1.使用a.append(1)時的return,
A& temp = *this;
2.使用b.A(const A& a)時,
const A& a = temp;
如果對的話往下看才有意義,我下面的傳參數
都是靠這個邏輯傳的。
接下來看code:
以這個例子來說,我覺得兩者output都不對= ='
我認為的答案如下:
Constructor a //A b(objName);
Deep copy when initial. //A temp = b; return時
Destructor a //出copy()時,解構a
------------------------------------
Constructor b //A b(objName);
Shadow copy when initial.//A temp = b; RVO的關係,改成move
Deep copy when initial. //A c(temp); 用C來初始化建構
------------------------------------
//main結束時全部解構
Destructor default //因為我複製時沒改到_objName,預設
Destructor a //最上面的a
--