Skip to content
Go back

暗黙的に宣言されるクラスメソッド

· Updated:
explicitly\implicitlydefault ctorcopy ctormove ctordtorcopy assignmove assign
no decl.
user-defined ctorno decl.
default ctor
copy ctorno decl.no decl.DEPRECATEDno decl.
move ctorno decl.deleteddeletedno decl.
dtorDEPRECATEDno decl.DEPRECATEDno decl.
copy assignDEPRECATEDno decl.no decl.
move assigndeletedno decl.deleted

方針として:

  • いずれかのコンストラクタを定義するなら、デフォルトコンストラクタについて記述しなければならない。
  • コピーを記述するなら、ムーブも記述しなければならない。
  • ムーブを記述するなら、コピーも記述しなければならない。コピーを禁止する場合も明示したほうが親切だろう。
  • コピーまたはムーブコンストラクタを定義するなら、対応する代入も必ず定義しなければならない。
  • そのクラスにおける代入が意味論的に異なる(例:ポインタの所有権を扱う)なら、すべてを定義しなければならない。

参考文献

Rule of Three