3. スマートポインタ

概要

「スマートポインタ」というのは、文字通り「気の利いたポインタ」のことです。C++では、動的なオブジェクトを扱うには、new で生成して、delete で解放するのが基本です。しかし、この方法では、ポインタを持ちまわっているうちに、解放忘れや二重解放、あるいは解放済みのオブジェクトを参照するといった、よくあるバグに遭遇しがちです。スマートポインタはそうした問題を解消してくれます。

標準 C++ ライブラリにも std::auto_ptr という簡易的なスマートポインタがあります。しかし、std::auto_ptr は、代入を行うと代入元のポインタがリセットされるなど、直感的ではない仕様になっており、それはそれで、また別のバグにつながることも多々あります。さらに、そうした仕様から、std::auto_ptr はコンテナの要素になることもできません。

TR1 では、参照カウンタを用いた、高機能なスマートポインタをサポートしています。Java や C# などと同様、実体を参照しているところがなくなるまで、オブジェクトの解放が保留されます。しかも、Java や C# ではメモリの解放しか行われませんが、C++ のスマートポインタはデストラクタを呼び出すことができるのです。

ヘッダ

Boost C++ Libraries の場合には、<boost/shared_ptr.hpp> のように、専用のヘッダファイルがありましたが、TR1 では std::auto_ptrstd::allocator と同じ <memory> をインクルードします。

このエントリーを含むはてなブックマーク