C ++での例外処理は、try / throw / catchに制限されています。Object Pascal、Java、C#、Pythonとは異なり、C ++ 11でもfinally
コンストラクトは実装されていません。
「例外の安全なコード」について議論しているC ++の文献がたくさんあります。リップマンは、例外セーフコードは重要だが高度で難しいトピックであり、彼の入門書の範囲を超えていると書いています。これは、セーフコードがC ++の基本ではないことを暗示しているようです。ハーブサッターは、例外的なC ++のトピックに10章を費やしています!
しかし、「例外セーフコード」を記述しようとするときに遭遇する問題の多くは、finally
構造が実装されていれば非常によく解決でき、プログラマは例外が発生した場合でもプログラムを復元できるようになりますリソース、潜在的に問題のあるコードの割り当てのポイントに近い、安全で安定した、漏れのない状態に。私は非常に経験豊富なDelphiおよびC#プログラマーとしてtry ..を使用します。これらの言語のほとんどのプログラマーと同様に、最終的にコード内でかなり広範囲にブロックします。
C ++ 11に実装されているすべての「付加機能」を考慮すると、「最終的に」まだ存在していないことに驚いた。
それでは、なぜfinally
コンストラクトがC ++で実装されていないのでしょうか?把握するのはそれほど難しくも高度な概念でもないので、プログラマーが「例外安全なコード」を書くのを支援するのに大いに役立ちます。
finally
C ++にはないのか、その代わりにどのような例外処理のテクニックが使用されているのか」という質問をします。このサイトのトピックで有効です。既存の答えはこれをうまくカバーしていると思います。finally
「価値のないものを含めたC ++デザイナーの理由は?」に関する議論に変わります。「finally
C ++に追加する必要がありますか?」質問へのコメントを超えて議論を続けると、すべての回答がこのQ&Aサイトのモデルに適合しません。