2

重複の可能性:
ベース仮想デストラクタを明示的に呼び出す必要がありますか?

あなたが以下を持っているとしましょう:

class ParentClass {
    ...
    virtual ~ParentClass();

class ChildClass {
    ...
    virtual ~ChildClass();

どの破壊者が呼ばれるでしょうか?親と子の両方のデストラクタが呼び出されますか?現在、私のコンピューターにはC++コンパイラーがセットアップされていません。

4

2 に答える 2

3

ChildClassから派生した場合ParentClass、派生したデストラクタが最初に呼び出され、次に親クラスが呼び出されます。あなたのコードにあるように、ChildClassから継承しませんParentClass

于 2012-09-08T23:36:02.080 に答える
1

はい、両方のコンストラクターが呼び出されます。構築と破棄は対称的です。すべてのサブオブジェクトは、作成されたときとまったく逆の順序で破棄されます。破壊の順序については、デストラクタが仮想かどうかは問題ではありません。仮想デストラクタと非仮想デストラクタの唯一の影響はdelete、ベースへのポインタを使用して駆動型のオブジェクトを ing する場合です。ベースのデストラクタが仮想でない場合、未定義の動作が発生します。

于 2012-09-08T23:38:53.083 に答える