なぜ C はネストされた例外を使用してデストラクターからのスローを許可しないのですか?
デストラクターから例外をスローすることは一般的に推奨されませんが、このようなシナリオでネストされた例外を利用することが提案されています。ただし、このアイデアは特定の制限のため実装されていません。
ネストされた例外と std::terminate の比較
デストラクターから例外がスローされると、別の例外が発生します。 「飛行中」かもしれない。ネストされた例外により、複数の例外を積み重ねることができますが、この場合、状況をどのように処理するかはすぐにはわかりません。歴史的には、std::terminate (またはその関連ハンドラー std::terminate_handler) を呼び出す必要があると決定されていました。
ネストされた例外の制限
ネストされた例外は可能です。デストラクターからのスローの問題は潜在的に解決されますが、実際的な制限があります:
現在の状況と将来の見通し
C 11 および C 14 では、ネストされた例外は次のとおりです。デストラクターからのスローには使用されません。 std::terminate はデフォルトの動作のままです。ただし、潜在的なパフォーマンスと互換性の問題が解決された場合、これは将来の C バージョンで変更される可能性があります。
代替アプローチ
デストラクターからスローする代わりに、代替アプローチを使用できます。考慮する:
以上がなぜ C はデストラクターのスローにネストされた例外を使用しないのですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。