基底クラスのデストラクタにはvirtualを


※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

メニュー>プログラミング>C++>基底クラスのデストラクタにはvirtualを

継承のお話。
C++ではコンストラクタに加えてその反対のデストラクタがありますネ

コンストラクタはインスタンスが生成されたときに必ず呼ばれるやつで
デストラクタは、インスタンスが消えるときに必ず呼ばれるやつですね

class Chara
{
public:
  Chara(){}
  ~Chara(){}
}


このクラスを継承する基底クラスとして利用する場合
デストラクタにはvirtualをつけてやりましょう

virtual ~Chara(){}

みたいにですね。

何故かと言うと、このクラスを継承したPlayerがあったとします。
そのプレイヤーをChara型のポインタで持った時。
つまり

Chara *point = new Player();

見たいな感じにしたとき。

pointは自分がCharaだと思っているので、呼ばれるデストラクタは
Charaのデストラクタだけで、Playerのデストラクタが呼ばれず。

delete point;

をしたときの動作が未定義になるからです。
Charaだけ消えて、Playerは残るみたいに
半分だけ消えているのでしょうか。

こうならないために基底クラスのデストラクタにはvirtualをつけておきます。
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。