boost::scoped_ptr

トップページ > メモリ管理 >

abstract

必要なヘッダ
<boost/scoped_ptr.hpp>
出来ること
ポインタの自動delete (コピー不能)
リファレンス
en / jp

sample

サンプルの動作確認バージョン [GCC4.4/1.41.0] [VC9/1.41.0]

#include <string>
#include <iostream>
#include <boost/scoped_ptr.hpp>
using namespace std;

int main()
{
	boost::scoped_ptr<string> s( new string("Test") );

	cout << *s << endl;
	return 0;
} // ここでdeleteされる。

etc

std::auto_ptr みたいなもので、これを使うことで、 何も書かなくても最後に delete してくれるようになります。 auto_ptr との違いは、所有権の移動という概念がないこと。 一度scoped_ptrに入れたら最後、絶対にその scoped_ptr オブジェクトによって delete されます。

いろんなオブジェクトに参照されるので何時 delete すべきかわからない、という場合にはこの scoped_ptr は使えません。 その場合は auto_ptrshared_ptr を利用します。

こちらは pimplイディオム など、 作るときはnewでも、最初から最後まで親オブジェクトの支配下にある… みたいなポインタに利用します。 const auto_ptr と似たようなものですが、たぶん こっちの方が効率がよいのではないかと。

see also

presented by k.inaba (kiki .a.t. kmonos.net) under CC0