C++ tappe
基底クラス作成時のコンストラクタとデストラクタの定義について
- コンストラクトとデストラクタは純粋仮想関数にはできない。
- コンストラクタにvirtualは付与できない。
- 基底クラスを抽象クラスとするのであれば、デストラクタに、virtualとdefaultをつけるのが無難。
ただし、基底側にメンバ変数持つ場合は、適切なデストラクタ処理を記載する必要がないか確認すること。
コピーしたくない場合、delete付与などもありえる。
デストラクタにvirtualを付与しなかった場合、基底クラスのポインタに派生クラスを代入した際に、派生クラスのデストラクタが呼ばれないという危険性がある。 - 引数なしのコンストラクタで問題ない場合は、基底クラスを抽象クラスとする場合、コンストラクタには、defaultをつけるのが無難。
- 引数付きのコンストラクタを定義すると、暗黙のdefautlコンストラクタは定義されなくなる。
明示的にdefaultコンストラクタを定義すると、引数なしのコンストラクタでインスタンスが生成できるようになってしまうので、引数による初期化を強制したい場合、想定と異なる挙動になってしまうので注意。
コメントを残す