ホームページ > バックエンド開発 > C++ > C の純粋な仮想デストラクターを単に宣言するだけでなく定義する必要があるのはなぜですか?

C の純粋な仮想デストラクターを単に宣言するだけでなく定義する必要があるのはなぜですか?

Linda Hamilton
リリース: 2024-12-15 20:16:16
オリジナル
294 人が閲覧しました

Why Must Pure Virtual Destructors in C   Be Defined, Not Just Declared?

C の純粋な仮想デストラクター

C では、抽象基本クラス内の純粋な仮想デストラクターの動作に注意することが重要です。以下に示すように、基本クラスで純粋な仮想デストラクターを宣言するのは直感的に思えるかもしれません:

class A {
public:
    virtual ~A() = 0;
};
ログイン後にコピー

このアプローチは間違っており、予期しない結果を招く可能性があります。

期待に反して、純粋な仮想デストラクターを宣言するだけでは、抽象基本クラスには十分ではありません。デストラクターの実装も重要です。純粋な仮想デストラクターを適切に実装する方法は次のとおりです。

class A {
public:
    virtual ~A() = 0;
};

inline A::~A() { }
ログイン後にコピー

空のインライン デストラクターはデフォルトの実装として機能し、派生クラスを破棄するときに未定義の動作を引き起こすことなくデストラクターを呼び出すことができます。

デストラクターの定義を省略した場合、クラス A から派生させ、その後派生オブジェクトを削除または破棄しようとすると、purecall ハンドラーが呼び出される可能性があります。その結果、プログラムがクラッシュします。

したがって、C で抽象基本クラスを使用する場合は、未定義の動作を防止し、リソースの適切なクリーンアップを確保するために、忘れずに純粋な仮想デストラクターを実装してください。

以上がC の純粋な仮想デストラクターを単に宣言するだけでなく定義する必要があるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート