継承されたデストラクタは仮想テーブル内に含まれていますか?

アルフィーの態度

コンパイラが仮想テーブルを使用している場合、Bの仮想テーブルはどのようになりますか?ウィルA::~A内側もBの仮想テーブル?

struct A{
    virtual ~A()
    {
        cout<<"A::destructor"<<endl;
    }
};
struct B:public A{
    ~B()
    {
        cout<<"B::destructor"<<endl;
    }
};
StoryTeller-Unslander Monica

いいえ、~Aの仮想テーブルにはありませんBそれは持っています~Bデストラクタに対応するエントリに。結局のところ、デストラクタが仮想として宣言されると、派生するすべてのデストラクタは仮想になります。

したがって、delete式は常に正しいデストラクタを呼び出します。方法ベースサブオブジェクトAB破棄され、コンパイラによって簡単に達成することができる静的にコールを注入~Aの終わりに~B概念的には次のようになります。

~B()
{
    cout<<"B::destructor"<<endl;

    //User defined code ended. Compiler generated one is here
    static_cast<A*>(this)->A::~A();
}

これはすべて、可能な実装の詳細を深く掘り下げています。これはいずれもC ++標準自体ではカバーされていません。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

基本クラスにデータメンバーが含まれていない場合でも、仮想継承は必要ですか?

分類Dev

継承されたクラスは、別の継承されたクラスの仮想関数をオーバーライドできますか?

分類Dev

プライベートフィールドはサブクラスによって継承されますか?

分類Dev

テンプレートクラスを継承し、現在継承しようとしているクラスのテンプレート化されたサブクラスにタイプを設定できますか?

分類Dev

@Dependent CDIアノテーションはサブクラスに継承されていますか?

分類Dev

仮想継承の使用中に呼び出されるデフォルトのコンストラクター

分類Dev

仮想継承は、実際には必要とされない、または使用されない場合、コストがかかりますか?

分類Dev

ViewModelはネストされたモデルをサポートしていますか?仮想プロパティをviewModelに適用できますか?

分類Dev

継承は、Unsafeクラスで取得されたフィールドのオフセットを変更しますか?または、特定の仮想マシンの実装に依存しますか?

分類Dev

デフォルトの仮想デストラクタは、コンパイラによって生成された移動操作を防止しますか?

分類Dev

オブジェクトタイプには、保護された仮想Finalizeメソッドが含まれていますか?

分類Dev

仮想デストラクタを使用せずに継承されたオブジェクトを削除中に中止する

分類Dev

サブクラスで仮想関数テーブルはどのように生成されますか

分類Dev

テンプレートクラスの仮想関数は暗黙的にインスタンス化されていますか?

分類Dev

Bootstrapテーブル内のネストされたテーブルが親のBootstrap「テーブル」クラスを継承しないようにするにはどうすればよいですか?

分類Dev

派生クラスに自動変数メンバーのみが含まれている場合、仮想デストラクタが必要ですか?

分類Dev

抽象クラス内でユーザー定義のデコレータを使用することは許可されていますか?または、継承後に使用する必要がありますか?

分類Dev

C ++仮想クラスのテンプレート化された子からデータを取得するにはどうすればよいですか?

分類Dev

継承された抽象(純粋仮想)クラスを継承されたクラスで満たしますか?

分類Dev

ケースクラスの継承は禁止されていますが、ライブラリからの依存関係をモデル化する方法は?

分類Dev

仮想CD-ROMにマウントした場合、ディスクイメージ内のデータはどこに保存されますか?

分類Dev

継承されたコンストラクターは、クラス内の初期化を無視します

分類Dev

Protobuf-netシリアル化親クラスは[ProtoIgnore()]としてマークされたオブジェクトプロパティを継承し、「タイプにシリアライザーが定義されていません:System.Object」をスローします

分類Dev

テンプレート化されたクラスの特殊な継承により、メンバー関数は継承されたクラスタイプではなくテンプレート化されたクラスタイプを返します

分類Dev

複数の仮想継承には、仮想関数の継承のような遅延バインディングが含まれますか?

分類Dev

intのインスタンスは、継承されたクラスよりもはるかに少ないバイト数を持っています

分類Dev

C ++ Derivedクラスに継承されないものは何ですか?どうやら、operator =といくつかのコンストラクターは実際に継承されています

分類Dev

シングルトンパターンを使用したPHPでのクラス継承は、継承されたクラスのインスタンス変数が再初期化された場合にのみ機能します。しかし、なぜ?

分類Dev

テンプレートパラメータとしてコンストラクタに渡されたクラスから継承し、それらから継承します

Related 関連記事

  1. 1

    基本クラスにデータメンバーが含まれていない場合でも、仮想継承は必要ですか?

  2. 2

    継承されたクラスは、別の継承されたクラスの仮想関数をオーバーライドできますか?

  3. 3

    プライベートフィールドはサブクラスによって継承されますか?

  4. 4

    テンプレートクラスを継承し、現在継承しようとしているクラスのテンプレート化されたサブクラスにタイプを設定できますか?

  5. 5

    @Dependent CDIアノテーションはサブクラスに継承されていますか?

  6. 6

    仮想継承の使用中に呼び出されるデフォルトのコンストラクター

  7. 7

    仮想継承は、実際には必要とされない、または使用されない場合、コストがかかりますか?

  8. 8

    ViewModelはネストされたモデルをサポートしていますか?仮想プロパティをviewModelに適用できますか?

  9. 9

    継承は、Unsafeクラスで取得されたフィールドのオフセットを変更しますか?または、特定の仮想マシンの実装に依存しますか?

  10. 10

    デフォルトの仮想デストラクタは、コンパイラによって生成された移動操作を防止しますか?

  11. 11

    オブジェクトタイプには、保護された仮想Finalizeメソッドが含まれていますか?

  12. 12

    仮想デストラクタを使用せずに継承されたオブジェクトを削除中に中止する

  13. 13

    サブクラスで仮想関数テーブルはどのように生成されますか

  14. 14

    テンプレートクラスの仮想関数は暗黙的にインスタンス化されていますか?

  15. 15

    Bootstrapテーブル内のネストされたテーブルが親のBootstrap「テーブル」クラスを継承しないようにするにはどうすればよいですか?

  16. 16

    派生クラスに自動変数メンバーのみが含まれている場合、仮想デストラクタが必要ですか?

  17. 17

    抽象クラス内でユーザー定義のデコレータを使用することは許可されていますか?または、継承後に使用する必要がありますか?

  18. 18

    C ++仮想クラスのテンプレート化された子からデータを取得するにはどうすればよいですか?

  19. 19

    継承された抽象(純粋仮想)クラスを継承されたクラスで満たしますか?

  20. 20

    ケースクラスの継承は禁止されていますが、ライブラリからの依存関係をモデル化する方法は?

  21. 21

    仮想CD-ROMにマウントした場合、ディスクイメージ内のデータはどこに保存されますか?

  22. 22

    継承されたコンストラクターは、クラス内の初期化を無視します

  23. 23

    Protobuf-netシリアル化親クラスは[ProtoIgnore()]としてマークされたオブジェクトプロパティを継承し、「タイプにシリアライザーが定義されていません:System.Object」をスローします

  24. 24

    テンプレート化されたクラスの特殊な継承により、メンバー関数は継承されたクラスタイプではなくテンプレート化されたクラスタイプを返します

  25. 25

    複数の仮想継承には、仮想関数の継承のような遅延バインディングが含まれますか?

  26. 26

    intのインスタンスは、継承されたクラスよりもはるかに少ないバイト数を持っています

  27. 27

    C ++ Derivedクラスに継承されないものは何ですか?どうやら、operator =といくつかのコンストラクターは実際に継承されています

  28. 28

    シングルトンパターンを使用したPHPでのクラス継承は、継承されたクラスのインスタンス変数が再初期化された場合にのみ機能します。しかし、なぜ?

  29. 29

    テンプレートパラメータとしてコンストラクタに渡されたクラスから継承し、それらから継承します

ホットタグ

アーカイブ