
116
|
4 章 スマートポインタ
raw ポインタは確かに強力な道具です。しかし、数十年の歴史から、少しでも注意を怠ったり些
細な過ちを犯すだけでも、まったく信頼できない代物に変貌することが分かっています。
スマートポインタ(smart pointer)はこの問題を解決する 1 つの方法です。raw ポインタをラッ
ピングし、raw ポインタのように動作しますが、多くの落とし穴を塞いでくれます。raw ポインタ
よりもスマートポインタを優先すべきなのは間違いありません。スマートポインタは raw ポインタ
でできることは実質的にすべて実行でき、また誤りを犯す恐れがはるかに少ないのです。
C++11 には 4 種類のスマートポインタがあります。std::auto_ptr、std::unique_ptr、std::
shared_ptr、std::weak_ptr です。いずれもダイナミックに割り当てたオブジェクトのライフタ
イムの管理を支援するべく設計されたものです。すなわち、適切な時に(例外発生時も含め)、適切
な方法でオブジェクトを確実に破棄し、リソースの解放もれを防止します。
std::auto_ptr は C++98 からそのまま残されたもので、非推奨とされています。後に C++11 の
std::unique_ptr となる内容を標準化しようとした試作品です。正しい処理を実行するにはムーブ
セマンティクスが必要ですが、C++98 にムーブ動作は存在しません。std::auto_ptr はムー