初期化と代入

『Acclerated C++』より

コピーコンストラクタ(copy constructor)はすでに存在する同じ型のオブジェクトをコピーして新しいオブジェクトを初期化するもので、自分のクラスの型の引数を1つだけ取るコンストラクタである。

代入演算子(assignment operator)はオブジェクトを他のオブジェクトに代入したときの振る舞いを規定するもので、自分のクラスのconst参照を引数にとるメンバ関数である。
代入は、常にすでにある値(左辺のもの)を消し、新しい値(右辺のもの)で置き換えるので、コピーコンストラクタとは異なる。

=というシンボルは、初期化と代入の両方で使用される。=が変数の初期化に使われるときには、コピーコンストラクタが呼び出される。=が代入のエクスプレッションに使われるときには、operator=が呼び出される。

代入(operator=)は常に前の値を破棄するのに対し、初期化はそのようなことをしない。初期化は新しいオブジェクトを生成し、同時に値を与える。

・コンストラクタは常に初期化をコントロールする
メンバ関数のoperator=は常に代入をコントロールする