「純粋仮想関数呼び出し」のクラッシュについて
プログラミングでは、「純粋仮想関数呼び出し」エラーによりプログラムが突然クラッシュすることがあります。これらのエラーは、オブジェクトの構築または破棄中に純粋仮想関数を呼び出そうとしたときに発生します。
純粋仮想関数
純粋仮想関数は、次のメンバー関数です。宣言だけを持ち、実装を持たない抽象クラス。これにより、派生クラスに関数の独自バージョンの実装が強制されます。
コンストラクターとデストラクターの制限
コンストラクター関数とデストラクター関数は、それぞれオブジェクトの初期化と破棄中に呼び出されます。これらの特別な関数の間、仮想関数の呼び出しは禁止されています。次の理由からです。
のソースクラッシュ
「純粋仮想関数呼び出し」クラッシュは、次の場合に発生します。
例
次のコードを考えてみましょう:
class Base { public: Base() { reallyDoIt(); } void reallyDoIt() { doIt(); } // DON'T DO THIS virtual void doIt() = 0; }; class Derived : public Base { void doIt() {} }; int main(void) { Derived d; // This will cause "pure virtual function call" error }
この例では、Base 内の realDoIt() の呼び出しです。コンストラクターは純粋仮想関数 doIt() を呼び出そうとします。コンストラクターが呼び出されているため、派生クラス オブジェクトはまだ構築されておらず、「純粋仮想関数呼び出し」エラーが発生します。
解決策
これらを回避するにはクラッシュする場合は、コンストラクターまたはデストラクターから純粋な仮想関数を呼び出さないようにしてください。代わりに、純粋な仮想関数を呼び出す前に、派生クラスが独自の実装を提供していることを確認してください。
以上が「純粋仮想関数呼び出し」エラーがプログラムのクラッシュを引き起こすのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。