特殊なメンバー関数

特殊なメンバー関数 は、特定の場合、コンパイラが自動的に生成するクラス (または構造体) メンバー関数です。 これらの関数は、既定のコンストラクターデストラクターコピー コンストラクターおよびコピー代入演算子、および 移動コンストラクターおよび移動代入演算子 です。 クラスで 1 つ以上の特殊なメンバー関数が定義されていない場合、コンパイラは、使用される関数を暗黙的に宣言して定義することがあります。 コンパイラによって生成される実装は、既定 の特殊なメンバー関数と呼ばれます。 必要でない場合、コンパイラは関数を生成しません。

既定の特殊なメンバー関数は、= default キーワードを使用して明示的に宣言できます。 これにより、コンパイラは、関数がまったく宣言されていない場合と同じように、必要な場合にのみ関数を定義します。

場合によっては、コンパイラが 削除された 特殊なメンバー関数を生成することがありますが、これは定義されていないため、呼び出すことができません。 これは、クラスの特定の特殊なメンバー関数の呼び出しが、クラスの他のプロパティによって意味を持たない場合に発生する可能性があります。 特殊なメンバー関数の自動生成を明示的に禁止するには、= delete キーワードを使用して、その関数を削除済みとして宣言します。

コンパイラは、他のコンストラクターを宣言していない場合にのみ、既定のコンストラクター (引数を取らないコンストラクター) を生成します。 パラメーターを取るコンストラクターのみを宣言した場合、既定のコンストラクターを呼び出そうとすると、コンパイラによってエラー メッセージが生成されます。 コンパイラによって生成される既定のコンストラクターは、オブジェクトの単純なメンバーごとの 既定の初期化 を実行します。 既定の初期化では、すべてのメンバー変数が不確定状態のままになります。

既定のデストラクターは、オブジェクトのメンバーごとの破棄を実行します。 基底クラスのデストラクターが仮想である場合にのみ、仮想です。

既定のコピーおよび移動の構築および割り当て操作では、静的でないデータ メンバーのビット パターンのコピーまたは移動をメンバーごとに実行します。 移動操作は、デストラクター、移動、またはコピー操作が宣言されていない場合にのみ生成されます。 既定のコピー コンストラクターは、コピー コンストラクターが宣言されていない場合にのみ生成されます。 移動操作が宣言されている場合は、暗黙的に削除されます。 既定のコピー代入演算子は、コピー代入演算子が明示的に宣言されていない場合にのみ生成されます。 移動操作が宣言されている場合は、暗黙的に削除されます。

関連項目

C++ 言語リファレンス