お世話になっております。
C++の解放時の動作について疑問があるため質問させていただきます。
class Super{
private:
float x, y, z;
public:
~Super(){}
};
class Child : public Super{
private:
int a, b, c;
public:
~Child(){}
};
int main( int argc, char **argv ){
A *a = new Child:
delete a;
return 0;
}
簡略ですが、上記を走らせた場合、インスタンスは正しく解放されるのでしょうか?
一応デストラクタは動作しますが、実際のところ、子クラス分のデータが解放されない気がします。
ネット上のサンプルでこういった例を時々目にしますが、この方法は問題ないのでしょうか?
よろしくお願いいたします。
ご回答、ありがとうございます。
Super *p = new Child;
とした際に、
delete p;
と
delete (Child*)p;
の動作に違いが出るか?という意味合いのつもりです。
補足ですが、質問内容に
A *a = new Child;
とありましたが、
Super *a = new Child;
のミスでした。
それでは、よろしくお願いいたします。
お礼
ご回答、ありがとございます。 VC++2008上で実行すると、子クラスのデストラクタは実行されていませんが、 メモリリークも検出されませんでした。 デストラクタ実行→メモリ領域解放 の動作順だとばかり考えていたので、いまいちピンときませんね…。 ちゃんと解放されているのなら、いいのですが…。