C ++ 0xでは、特定の関数をデフォルトとして指定できます。
struct A {
A() = default; // default ctor
A(A const&) = default; // copy ctor
A(A&&) = default; // move ctor
A(Other); // other ctor
~A() = default; // dtor
A& operator=(A const&) = default; // copy assignment
A& operator=(A&&) = default; // move assignment
};
これらの関数の実装は、コンパイラーがそれらを生成した場合と同じです。これは、ほとんどの状況で、独自の関数を宣言しない場合に通常発生します。
いずれかのctor(上記の他のいずれか)を宣言した場合、デフォルトのctorは生成されないため、デフォルトで「元に戻す」必要がある場合があります。
ただし、ベースまたはデータメンバーがそれらを除外しない限り、クラスには常にコピーアンドムーブctor—があり、それらが除外されている場合、デフォルトの実装は機能しません。クラスには常にdtorがあります。
コピーctor、移動ctor、またはデストラクタを明示的にデフォルト設定する必要があるのはなぜですか?とにかく、暗黙的に生成された実装は同じことをしませんか?