これは些細な質問になるはずですが、stackoverflowで明示的に見つけることができませんでした。
以下は、ユーザーから提供されない場合、暗黙的に定義されます。
- デフォルト(パラメーターなし)コンストラクター
- コピーコンストラクタ
- コピー代入演算子
- デストラクタ
しかし、私はどこかで(今は見つけられないようですが)、コンパイラーが暗黙的にそれらを実装しないいくつかの条件があることを読みました。
これらの条件は何ですか?
これは些細な質問になるはずですが、stackoverflowで明示的に見つけることができませんでした。
以下は、ユーザーから提供されない場合、暗黙的に定義されます。
しかし、私はどこかで(今は見つけられないようですが)、コンパイラーが暗黙的にそれらを実装しないいくつかの条件があることを読みました。
これらの条件は何ですか?
次の場合、デフォルトのコンストラクター(たとえばX()
)は暗黙的に生成されません。
const
オブジェクト、またはデフォルトのコンストラクターがないかアクセスできないクラスなど)。X() = delete;
次の場合、コピーコンストラクタ(たとえばX(const X&)
)は暗黙的に生成されません。
X
を取ります)X
X&
const X&
X(const X&) = delete;
次の場合、コピー代入演算子(たとえば、X& operator=(const X&)
)は暗黙的に生成されません。
X
の場合は、または)operator=
X
X&
const X&
const
オブジェクト、または代入演算子がないかアクセスできないクラスなど)X& operator=(const X&) = delete;
次の場合、デストラクタ(たとえば~X()
)は暗黙的に生成されません。
~X() = delete;
移動コンストラクター(C ++ 11)(たとえば、X(X&&)
)は、次の場合に暗黙的に生成されません。
X
の場合、コンストラクターを取るX&&
)const
つまり、参照であるか、削除された、アクセスできない、またはあいまいな移動コンストラクターがあります)X(X&&) = delete;
ムーブ代入演算子(C ++ 11)(たとえば、X& operator=(X&&)
)は、次の場合に暗黙的に生成されません。
X
ました(クラスの場合、operator=
テイクX&&
)const
つまり、参照であるか、削除された、アクセスできない、またはあいまいなムーブ代入演算子があります)X& operator=(X&&) = delete;