私が Java を扱ってから少なくとも 5 年は経ちますが、その頃は、クリーンアップが必要なオブジェクト (ソケット、DB ハンドルなど) を割り当てたいときはいつでも、finally
ブロックを追加してクリーンアップ メソッドを呼び出すことを覚えていなければなりませんでした。そこの。
対照的に、C++ (または Perl などのオブジェクトの有効期間が決定論的である他の言語) では、クラスの実装者は、そのクラスのオブジェクトがスコープ外になるたびにクリーンアップを実行するデストラクタ関数を定義します。このアプローチの利点は、オブジェクトのユーザーがオブジェクトのクリーンアップを忘れないことです。例外がスローされた場合でも、デストラクタが自動的に呼び出されます。このアプローチは、RAII のかなりひどい名前 (「リソースの取得は初期化」) で行われます。
「RAII の方法」で物事を行うことで、リソースの割り当て解除が発生するかどうか、いつ発生するかを心配する必要がないという点で、多くの精神的オーバーヘッドを節約できたというのが私の経験です。私たちは中規模のプロジェクトに Java を使用することを検討していますが、最後に Java を調べてから言語に追加された多くの新機能の中に、ある種の決定論的破壊があるのではないかと考えています。(「JavaにはRAIIがない」という私の不満がこのスレッドで非難されたことを願っていますが、これまでのところ、グーグルで詳細を見つけることができませんでした。)
したがって、誰かがJavaでこれを行う方法についての入門資料を教えてくれれば、それは素晴らしいことです!