別のクラス (クラス B) を継承するクラス (クラス A) があります。
class A: public B
クラス B は、コピー構造と代入演算子を無効にしました (コピーが許可されていないため)。
private:
B(const B&);
B& operator=(const B&);
私の質問は、派生クラスのコピー コンストラクトと代入演算子も無効にする必要があるか、または両方を定義しなくても問題ないかということです。
別のクラス (クラス B) を継承するクラス (クラス A) があります。
class A: public B
クラス B は、コピー構造と代入演算子を無効にしました (コピーが許可されていないため)。
private:
B(const B&);
B& operator=(const B&);
私の質問は、派生クラスのコピー コンストラクトと代入演算子も無効にする必要があるか、または両方を定義しなくても問題ないかということです。
サブクラスは、親クラスと同じか、より厳密な [事前条件、事後条件、および不変条件] を持つ必要があります。これがリスコフの置換原理です。したがって、基本クラスの契約を緩めることになるため、派生クラスでコピー構築などを再度有効にしないでください。
それを行う必要がある (または本当にやりたい) ことがわかった場合は、設計を再考する必要があることを示している可能性があります。
問題はむしろ、それを再度有効にするかどうかです。ベースまたはメンバーがコピー不可の場合、クラスはデフォルトでコピー不可になります。一般に、合理的なセマンティクスを与えることは困難または不可能であるため、削除することは望ましくありません。ただし、注目すべき例外があります。たとえば、基本クラスが抽象クラスの場合、複製をサポートするために、派生クラスでコピー コンストラクターを有効にすることができます (代入は有効にできません)。