コンストラクション関数と付与操作関数のコピー


 1 class Widget{

 2 

 3      Widget();      // 

 4 

 5      Widget(const Widget& rhs);    // 

 6 

 7      Widget& operator= (const Widget& rhs);// 

 8 

 9 };

10 Widget w1;    // 

11 Widget w2(w1);    // 

12 w1 = w2 ;     // 

上記の文はよく理解されていますが、"="はレプリケーションコンストラクタを呼び出すためにも使用できることに注意してください.
Widget w3 = w2;
このとき呼び出されるのはコピーコンストラクション関数であり、新しいオブジェクトが定義されている場合、上のw 3のようなコンストラクション関数が呼び出されるに違いありません.割り当て操作を呼び出すことはできません.新しいオブジェクトが定義されていない(例えば、上のw 1=w 2)場合、コンストラクション関数が定義されない場合は、当然、付与操作が呼び出される.