Arantium Maestum

プログラミング、囲碁、読書の話題

Effective C++勉強メモ: Item 5 コンパイラが作成してくれるメンバ関数

ここから第2章。Constructor/Destructor/Assignment関係の話題。

class Empty {};

クラス定義がこれだけでも、Empty型のオブジェクトが初期化されたりコピーされたり代入されたりする記述があれば

  • Constructor
  • Destructor
  • Copy Constructor
  • Copy Assignment Operator

の四つは必要に応じてコンパイラが書いてくれるよ、という話。処理の内容もちゃんと(?)書かれて、non-staticなメンバデータを初期化・破棄・copyしたりする。

ただし状況によってはコンパイラが自動的に作成できないこともある。

特に参照型やconst型のメンバデータがあるクラスの場合、Copy Assignmentでどういう処理が期待されているのか自明ではないので、プログラマが明示的に書く必要がある。こういうケースでは、ちゃんと自分で定義せずにcopy assignmentを使おうとするとコンパイラエラーになる。