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

Amr Ashraf
class a
{
public : ~a() { cout << "a"; };
};
class b :virtual public a
{
public : ~b() { cout << "b"; };
};

私がそのようなものを作ろうとしたとき、このコードで:

a* p = new b;
delete p;

私にエラー(中止)を与えますが、仮想継承を削除すると機能しました。仮想デストラクタなしでそのようなものを作成するのは真実ではないことを私は知っていますが、なぜこのエラーは仮想継承を使用した場合にのみ表示されるのですか?

Sam Varshavchik

継承が仮想であるかどうかに関係なく、削除はどちらの場合も未定義の動作です。

スーパークラスへのポインタを使用して削除を実行できるようにするには、スーパークラスに仮想デストラクタが必要です。

コードの1つのバリエーションがプラットフォームで機能するからといって、どちらのバリエーションも有効であるとは限りません。そうではない。デストラクタを仮想デストラクタに変更すると、継承が仮想であるかどうかに関係なく、これが機能するはずです。

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

変更せずにネストされたオブジェクトからデータを削除する

分類Dev

Swift:継承されたクラスであるオブジェクトにデータをデコードするとエラーが発生します

分類Dev

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

分類Dev

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

分類Dev

継承されたオブジェクトのリストを使用する

分類Dev

純粋仮想クラス(インターフェース)とそれを継承するオブジェクトの内部配列割り当て

分類Dev

継承されたコンストラクターを使用してオブジェクトをコピーすることはできません

分類Dev

GCC:階層に仮想継承がある場合、C ++ 11インラインオブジェクトの初期化(「this」を使用)は機能しません

分類Dev

継承されたクラスのオブジェクトをスーパークラスオブジェクトに割り当てる

分類Dev

wxPython-継承されたクラスに新しいオブジェクトを追加しますか?

分類Dev

親クラス関数で継承されたオブジェクトを使用するにはどうすればよいですか?

分類Dev

オブジェクトIDを変更せずにネストされたオブジェクトデータを更新する

分類Dev

生成されたオブジェクトにプロトタイプの継承を追加する方法

分類Dev

型を継承せずに継承された構造体から継承された型に実際のオブジェクトメソッドを実行する

分類Dev

キーを削除せずにオブジェクトとネストされたオブジェクトから値をリセットする方法

分類Dev

コンストラクタ継承を使用した仮想継承

分類Dev

C ++:デストラクタを呼び出さずにオブジェクトを削除します

分類Dev

Retrofitを使用してラップされた内部クラスを使用せずにオブジェクトのリストを取得する

分類Dev

QT Creatorで継承されたクラスのオブジェクトとしてQWidgetを宣言するにはどうすればよいですか?

分類Dev

継承されたクラスオブジェクトの配列を作成するにはどうすればよいですか?

分類Dev

オブジェクトを再度宣言せずに、別のクラスで宣言されたオブジェクトを使用できますか?

分類Dev

データベースからオブジェクトの親IDを取得する(仮想ICollectionを介してMVCによって作成されます)

分類Dev

KotlinコンパニオンオブジェクトでJavaクラスから継承されたゲッターをオーバーライドする方法

分類Dev

c#:渡されたオブジェクトを継承したオブジェクトを取得する方法

分類Dev

Javaでクラスを使用せずにオブジェクトを作成する

分類Dev

オブジェクトを宣言せずに Typescript クラスを使用する

分類Dev

Pythonクラスオブジェクトのリストをクラスに継承する方法は?

分類Dev

プライベートデストラクタを使用して動的に割り当てられたオブジェクトを削除する

分類Dev

EntityFrameworkを使用して非常にネストされた子オブジェクトにデータを追加する

Related 関連記事

  1. 1

    変更せずにネストされたオブジェクトからデータを削除する

  2. 2

    Swift:継承されたクラスであるオブジェクトにデータをデコードするとエラーが発生します

  3. 3

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

  4. 4

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

  5. 5

    継承されたオブジェクトのリストを使用する

  6. 6

    純粋仮想クラス(インターフェース)とそれを継承するオブジェクトの内部配列割り当て

  7. 7

    継承されたコンストラクターを使用してオブジェクトをコピーすることはできません

  8. 8

    GCC:階層に仮想継承がある場合、C ++ 11インラインオブジェクトの初期化(「this」を使用)は機能しません

  9. 9

    継承されたクラスのオブジェクトをスーパークラスオブジェクトに割り当てる

  10. 10

    wxPython-継承されたクラスに新しいオブジェクトを追加しますか?

  11. 11

    親クラス関数で継承されたオブジェクトを使用するにはどうすればよいですか?

  12. 12

    オブジェクトIDを変更せずにネストされたオブジェクトデータを更新する

  13. 13

    生成されたオブジェクトにプロトタイプの継承を追加する方法

  14. 14

    型を継承せずに継承された構造体から継承された型に実際のオブジェクトメソッドを実行する

  15. 15

    キーを削除せずにオブジェクトとネストされたオブジェクトから値をリセットする方法

  16. 16

    コンストラクタ継承を使用した仮想継承

  17. 17

    C ++:デストラクタを呼び出さずにオブジェクトを削除します

  18. 18

    Retrofitを使用してラップされた内部クラスを使用せずにオブジェクトのリストを取得する

  19. 19

    QT Creatorで継承されたクラスのオブジェクトとしてQWidgetを宣言するにはどうすればよいですか?

  20. 20

    継承されたクラスオブジェクトの配列を作成するにはどうすればよいですか?

  21. 21

    オブジェクトを再度宣言せずに、別のクラスで宣言されたオブジェクトを使用できますか?

  22. 22

    データベースからオブジェクトの親IDを取得する(仮想ICollectionを介してMVCによって作成されます)

  23. 23

    KotlinコンパニオンオブジェクトでJavaクラスから継承されたゲッターをオーバーライドする方法

  24. 24

    c#:渡されたオブジェクトを継承したオブジェクトを取得する方法

  25. 25

    Javaでクラスを使用せずにオブジェクトを作成する

  26. 26

    オブジェクトを宣言せずに Typescript クラスを使用する

  27. 27

    Pythonクラスオブジェクトのリストをクラスに継承する方法は?

  28. 28

    プライベートデストラクタを使用して動的に割り当てられたオブジェクトを削除する

  29. 29

    EntityFrameworkを使用して非常にネストされた子オブジェクトにデータを追加する

ホットタグ

アーカイブ