區分copy構造與copy賦值

Andy Niu發表於2013-10-30

1、

  Widget w1;     //呼叫Default構造方法

  Widget w2(w1);  //呼叫copy構造方法

  w1 = w2;     //呼叫copy賦值操作符

  Widget w3 = w2;   //呼叫copy構造方法

2、 對於Widget w3 = w2;   是呼叫copy構造方法,為什麼?

  因為定義一個物件的時候,肯定要呼叫構造方法。因此,對於Widget w3(w2) 和Widget w3 = w2表達的意思一樣,都是以W2為藍本,copy構造物件W3。

3、方法呼叫做了兩件事:a、用實參初始化形參;b、控制權交給被調方法。

  被調方法的執行,以形參的定義和初始化開始。舉例來說:

  getName(Person p);

      Person p1;

      string name = getName(p1);

      呼叫方法getName(p1)的時候,在方法getName(Person p)內部,首先定義並且初始化p,執行 Person p = p1,也就是以p1為藍本copy構造p,注意這裡不是copy賦值。因此,呼叫方法,pass-by-value,意味著呼叫copy構造方法。 

相關文章