|
RAII(Resource Acquisition Is Initialization、日本語では「リソースの確保は初期化時に」、「リソースの取得と初期化」など)は、資源(リソース)の確保と解放を変数の初期化と破棄処理に結び付けるというプログラミングのテクニックで、特にC++とD言語で一般的である。 RAIIでは資源の取得を変数の構築(初期化)時、返却を破壊時に行う。自動変数がスコープを離れるときデストラクタが呼ばれるため、変数の寿命が終わるとすぐに資源が返却されることが保障できるようになった。これは例外が起こったときでも同様であるため、RAIIは例外安全なコードを書くための鍵となる概念となった (Sutter 1999)。 == 典型的な用法 == RAIIはよくマルチスレッドアプリケーションにおいてスレッドのロックの管理に用いられる。ほかにはファイル操作にも用いられ、標準C++ライブラリのファイルストリームでは、オブジェクトのコンストラクタでファイルストリームを開き、デストラクタで閉じる。C++ではオブジェクトをスタックに割り当てることが可能で、このようにC++のスコープの機構はファイルアクセスの管理に活用できる。 後の例のようにRAIIは例外安全の達成にも活用される。RAIIを使えばあちこちに try -catch ブロックを用いることなくリソースリークを防げる。動的に確保されたメモリの所有権もRAIIで管理できる。この用途に標準C++ライブラリでは unique_ptr が用意されている。さらに、共有されるオブジェクトの生存期間は、C++の場合Boostのboost::shared_ptr (C++11ではstd::shared_ptr )・参照カウント方式、boost::intrusive_ptr ・侵入型参照カウント方式、LokiのポリシーベースのLoki::SmartPtr によって所有権を共有するという管理の仕方ができる。抄文引用元・出典: フリー百科事典『 ウィキペディア(Wikipedia)』 ■ウィキペディアで「RAII」の詳細全文を読む スポンサード リンク
|