ホームページ  >  記事  >  バックエンド開発  >  C デストラクターが `std::nested_Exception` で例外をスローできないのはなぜですか?

C デストラクターが `std::nested_Exception` で例外をスローできないのはなぜですか?

DDD
DDDオリジナル
2024-11-03 20:40:29856ブラウズ

Why Can't C   Destructors Throw Exceptions with `std::nested_exception`?

デストラクターからのスローを許可するために std::nested_Exception を使用しないのはなぜですか?

std::nested_Exception を使用しない主な理由デストラクターからの例外のスローを容易にするためには、別の例外が「処理中」の場合の潜在的な曖昧さがあります。デストラクターの実行中に例外がすでにアクティブになっている場合、その状況をどのように処理するかは不明です。既存の例外を新しい例外で上書きすることが潜在的な解決策になりますが、C コミュニティ内のコンセンサスでは、代わりに std::terminate またはカスタム std::terminate_handler を呼び出すことが支持されました。

ネストされた例外の探索

ネストされた例外を使用するというアイデアが検討されましたが、潜在的な実装上の問題がその採用を妨げた可能性があります。具体的には、潜在的なパフォーマンスへの影響と例外処理の複雑さの増加に関する懸念が、現在のアプローチを維持する決定に影響を与えた可能性があります。

今後の展開

C 時点17 以降、ネストされた例外を使用したデストラクターからの例外スローを許可するというスタンスは変わりません。ただし、C の将来のバージョンではこの概念を再検討し、オブジェクト破棄時の例外の問題に対処するための代替ソリューションを導入する可能性があります。

以上がC デストラクターが `std::nested_Exception` で例外をスローできないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。