0

デストラクタが呼び出されないのはなぜですか?

クラス A と B のデストラクタを作成しましたが、呼び出されていません。


#include<iostream.h>
#include<conio.h>

class A {
    public :

    A() {
        cout<<"\nIn A const.";
    }

    ~A() {
        cout<<"\nIn A dest.";
    }
};

class B : public A {
    public :

    B() {
        cout<<"\nIn B const.";
    }

    ~B() {
        cout<<"\nIn B dest.";
    }
};

int main() {
    A a;
    B b;
    getch();
    return 0;
}

コンストラクターが呼び出されないのはなぜですか?

4

3 に答える 3

4

スタックに割り当てられたオブジェクトのデストラクタは、オブジェクトを含むブロックを終了するとすぐに実行されます。

getch()あなたのコードは、わずかに変更された場合、前に呼び出されたデストラクタを表示します

int main() {
    {
        A a;
        B b;
    }
    getch();
    return 0;
}

ここでは、内側のブロックを定義するために追加の中かっこを使用しています。このブロック内で定義されたオブジェクトは、ブロックが終了すると (したがって、キーボード入力を待つ前に) 破棄されます。

あなたのコードでは、本体ブロックが終了したときにデストラクタが呼び出されmainます。これは、キーボードを待機した後であることを意味します。

于 2013-09-15T07:35:16.233 に答える
-1
class A {
public :

A() {
    cout<<"\nIn A const.";
}

virtual ~A() {
    cout<<"\nIn A dest.";
}
};

デスコンストラクターはvirtual.

于 2013-09-15T12:56:46.917 に答える