典型的な用法とは? わかりやすく解説

典型的な用法

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/07/14 06:48 UTC 版)

RAII」の記事における「典型的な用法」の解説

RAIIの最も基本的な活用例は、動的確保されメモリ自動解放するスマートポインタ (smart pointer) である。C++においてnew演算子(またはnew[]演算子)で動的に確保されメモリは、不要になったときにその領域を指すポインタ経由してdelete演算子(またはdelete[]演算子)で明示的に解放しなければならない。もし解放忘れがあるとメモリリークにつながるが、解放忘れないよう細心の注意払って、コードパスに手動ひとつひとつ削除処理を記述していくことは非常に手間がかかる。一方C++ではオブジェクトスタック割り当てることも可能であり、動的確保されメモリを指すポインタラップするスマートポインタクラスのオブジェクトスタック割り当て、ラッパーオブジェクトの寿命尽きた時点自動的に呼び出されるデストラクタ利用することにより、動的確保されメモリの解放明示的に逐一記述することなく暗黙的かつ確実に実行させることができる。標準C++ライブラリにおける動的配列クラステンプレートのstd::vectorなども、プログラマ明示的にnew[]およびdelete[]を呼び出す必要のないRAIIクラス一種である。 RAIIファイル操作にも用いられるC言語ではファイルアクセスの際、fopen()関数により取得したFILEオブジェクト明示的にfclose()関数解放することでファイル閉じる必要があったが、標準C++ライブラリのファイルストリームでは、オブジェクトコンストラクタでファイルストリームを開きデストラクタ閉じることで、ファイルハンドルの管理自動化しリソースリークを防ぐことができる。このようなファイルアクセス管理限らずC++デストラクタ機構あらゆるリソース寿命管理活用できる。ほかには、マルチスレッドアプリケーションにおいてクリティカルセクションロック管理にもよく用いられるC++03規格以前においても、Boost C++ライブラリMicrosoft Foundation Classライブラリなどにクリティカルセクション管理用のRAIIクラス用意されていたが、C++11規格スレッドおよび同期オブジェクト標準化された際に、類似のRAIIクラスstd::lock_guardおよびstd::unique_lockとして導入された。 また、動的に確保されメモリ所有権RAII管理できる所有権唯一となるスマートポインタクラステンプレートとして、C++03までの標準C++ライブラリではstd::auto_ptrが用意されていたが、C++11以降では非推奨となり、代替std::unique_ptrが用意されている。Boost C++ライブラリには類似のクラステンプレートとしてboost::scoped_ptrやboost::interprocess::unique_ptrが実装されている。また、参照カウント方式所有権共有するオブジェクトのスマートポインタクラステンプレートとして、Boost C++ライブラリboost::shared_ptrがある。これはC++11にてstd::shared_ptrとして標準化された。shared_ptrとともに利用する弱参照スマートポインタとして、それぞれboost::weak_ptrおよびstd::weak_ptrが存在するそのほか侵入参照カウント方式boost::intrusive_ptr、Loki英語版)のポリシーベースのLoki::SmartPtr、COMインターフェイスオブジェクト (IUnknown) の参照カウント管理特化したATLATL::CComPtrなどがある。 後の例のようにRAII例外安全の達成にも活用されるRAII使えばあちこちにtry-catchブロック記述することなくメモリリークリソースリーク防げる。

※この「典型的な用法」の解説は、「RAII」の解説の一部です。
「典型的な用法」を含む「RAII」の記事については、「RAII」の概要を参照ください。

ウィキペディア小見出し辞書の「典型的な用法」の項目はプログラムで機械的に意味や本文を生成しているため、不適切な項目が含まれていることもあります。ご了承くださいませ。 お問い合わせ



英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「典型的な用法」の関連用語

典型的な用法のお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



典型的な用法のページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
ウィキペディアウィキペディア
Text is available under GNU Free Documentation License (GFDL).
Weblio辞書に掲載されている「ウィキペディア小見出し辞書」の記事は、WikipediaのRAII (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。

©2025 GRAS Group, Inc.RSS