IT用語集 › プログラミング › Rule of five(5の原則)

Rule of five(5の原則)

プログラミング Svenska → 更新: 2026-10-21

クラスに独自のデストラクタが必要なら、ほぼ確実に独自のコピーコンストラクタとコピー代入演算子、そしてC++11以降はムーブコンストラクタとムーブ代入演算子も必要になる。

理由は単純である。どれか一つが必要だということは、そのクラスがリソースを管理しているということだ。この場合、コンパイラが自動生成する他の関数は誤った動作をする。ポインタを浅くコピーして二つのオブジェクトが同じメモリを所有していると思い込み、二重に解放してしまうのだ。

もともとは「3の原則」で、デストラクタ、コピーコンストラクタ、コピー代入が対象だった。C++11で二つのムーブ操作が加わり、厄介な落とし穴も生まれた。デストラクタを宣言しただけで、暗黙に生成されるムーブ操作が抑制されるのだ。古い3の原則に従ったクラスは、ムーブすべき場面で黙ってコピーになる。正しくは動くが、測定できるほど遅く、見落としやすい。

← 用語集に戻る