C の純粋な仮想デストラクター
C では、抽象基本クラス内の純粋な仮想デストラクターの動作に注意することが重要です。以下に示すように、基本クラスで純粋な仮想デストラクターを宣言するのは直感的に思えるかもしれません:
class A { public: virtual ~A() = 0; };
このアプローチは間違っており、予期しない結果を招く可能性があります。
期待に反して、純粋な仮想デストラクターを宣言するだけでは、抽象基本クラスには十分ではありません。デストラクターの実装も重要です。純粋な仮想デストラクターを適切に実装する方法は次のとおりです。
class A { public: virtual ~A() = 0; }; inline A::~A() { }
空のインライン デストラクターはデフォルトの実装として機能し、派生クラスを破棄するときに未定義の動作を引き起こすことなくデストラクターを呼び出すことができます。
デストラクターの定義を省略した場合、クラス A から派生させ、その後派生オブジェクトを削除または破棄しようとすると、purecall ハンドラーが呼び出される可能性があります。その結果、プログラムがクラッシュします。
したがって、C で抽象基本クラスを使用する場合は、未定義の動作を防止し、リソースの適切なクリーンアップを確保するために、忘れずに純粋な仮想デストラクターを実装してください。
以上がC の純粋な仮想デストラクターを単に宣言するだけでなく定義する必要があるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。