デストラクターからの例外のスロー: ネストされた例外のジレンマ
C では、デストラクターからの例外のスローは特定の課題を引き起こします。デストラクターが呼び出されるとき、別の例外がすでにアクティブになっている可能性があります。このあいまいさにより、このような状況をどのように処理するかという問題が生じます。
伝統的に、C はデストラクターから例外がスローされたときに std::terminate または std::terminate_handler を呼び出すことに依存してきました。このアプローチにより、アクティブな例外が確実に終了されます。
ただし、C 11 では、例外のネストを可能にする機能 std::nested_Exception が導入されました。これは当初、デストラクターからの例外を処理するための潜在的なソリューションとして考えられていました。アクティブな例外内に新しい例外をネストすることで、例外の優先順位の問題を解決できます。
その可能性にもかかわらず、このアイデアは C 11 または C 14 では採用されませんでした。この決定は、元の動作を維持するために行われました。 std::terminate.
ネストされた例外の長所と短所
例外をネストすると、両方の例外からの情報が保持されるという利点がありますが、潜在的な欠点もあります。 。たとえば、予期しない副作用が発生したり、std::terminate の予期された動作に干渉したりする可能性があります。
代替ソリューション
現時点では、 C 17 のデストラクターからの例外を処理するためにネストされた例外を使用します。代わりに、次のような代替アプローチが推奨されます。
以上がC のデストラクターからスローされた例外を処理するには、ネストされた例外を使用する必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。