Skip to content
Blog
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.deleted\✔deletedno decl.
dtor✔DEPRECATEDno decl.\DEPRECATEDno decl.
copy assign✔DEPRECATEDno decl.✔\no decl.
move assign✔deletedno decl.✔deleted\

方針として:

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

参考文献#

Rule of Three


Share this post:

Previous Post
StringViewでメモリリークが起こる
Next Post
Hugoで数式を扱う