本文へスキップ

スマートポインタとは?

すまーとぽいんた

スマートポインタとは、メモリ管理の責務を自動化するために通常のポインタを拡張したオブジェクトで、メモリリークやダングリングポインタを防ぐ仕組みです。

スマートポインタ(Smart Pointer)は、C++やRustなどの言語において、通常の生ポインタを包んでメモリの確保・解放を自動管理するクラステンプレートです。通常のポインタが単なるメモリアドレスであるのに対し、スマートポインタはRAII(Resource Acquisition Is Initialization)の原則に基づいて、スコープから外れた際に自動でリソースを解放します。

C++では標準ライブラリに主に以下の三種類が用意されています。

  • unique_ptr:所有権を唯一持つ排他的スマートポインタ。コピーは禁止され、ムーブのみ可。最も軽量で速い。
  • shared_ptr:参照カウント方式で複数の所有者が共有できるスマートポインタ。参照カウントがゼロになった時点でオブジェクトが自動解放される。
  • weak_ptr:shared_ptr が管理するオブジェクトへの弱参照。循環参照によるメモリリークを防ぐために shared_ptr と組み合わせて使う。

Rustでは所有権システムによって同様の保証がコンパイル時に行われます。RustのBox<T>、Rc<T>、Arc<T>がそれぞれ unique_ptr・shared_ptr の役割に相当します。

スマートポインタの採用によって、C言語で多発していた二重解放・メモリリーク・ダングリングポインタといった問題を大幅に減らすことができ、現代的なC++開発では生のnew/deleteを直接使うことは推奨されなくなっています。

使い方・例文

C++でファイルハンドルをunique_ptrで管理すると、関数が例外で中断されてもデストラクタが確実に呼ばれてファイルがクローズされるため、リソースリークを防ぐことができます。

この用語をシェア

𝕏 でポスト LINE

最終更新:

関連用語