クラスBaseとClass派生があります。
- クラスでコピーコンストラクターを宣言した場合、コンパイラーはコンパイル中にコピーコンストラクターを定義しますか?
- Derivedクラスのコピーコンストラクターが呼び出された場合はどうなりますか?Baseクラスのコピーコンストラクターに依存していますか?
(標準コンパイル中のコピーコンストラクターの観点から、基本クラスと派生クラスの関係を知る必要があります。コンパイラーはコピーコンストラクターをどのように定義しますか)
クラスBaseとClass派生があります。
(標準コンパイル中のコピーコンストラクターの観点から、基本クラスと派生クラスの関係を知る必要があります。コンパイラーはコピーコンストラクターをどのように定義しますか)
クラスでコピーコンストラクターを宣言した場合、コンパイラーはコンパイル中にコピーコンストラクターを定義しますか?
いいえ、それはしません。
コピーコンストラクターを宣言し、それを定義しないと、リンクエラーが発生します。コピーコンストラクターに明示的な宣言を提供することにより、暗黙的に生成されたものではニーズに十分ではないことをコンパイラーに通知し、独自のバージョンを提供することを約束します。しかし、あなたが定義を提供しないとき、あなたはその約束を破ります。
Derivedクラスのコピーコンストラクターが呼び出された場合はどうなりますか?Baseクラスのコピーコンストラクターに依存していますか?
Baseクラスのコピーコンストラクターの有無は、派生クラスのコピーコンストラクターには影響しません。ルールは単純です
。明示的な宣言を指定しない場合、コンパイラはクラスのコピーコンストラクタを生成します。コンパイラは、コードがコピーコンストラクタを使用する場合にのみこれを行うことに注意してください。コードがコピーコンストラクターを使用しないことをコンパイラーが検出した場合、それが不要なオーバーヘッドであり、C ++の基本的なルールである「使用した分だけ支払う」という理由だけで、コピーコンストラクターは生成されません。