サンプルの動作確認バージョン [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される。
std::auto_ptr
みたいなもので、これを使うことで、
何も書かなくても最後に delete
してくれるようになります。
auto_ptr
との違いは、所有権の移動という概念がないこと。
一度scoped_ptr
に入れたら最後、絶対にその scoped_ptr
オブジェクトによって delete
されます。
いろんなオブジェクトに参照されるので何時 delete
すべきかわからない、という場合にはこの scoped_ptr
は使えません。
その場合は auto_ptr
か
shared_ptr
を利用します。
こちらは pimplイディオム など、
作るときはnewでも、最初から最後まで親オブジェクトの支配下にある…
みたいなポインタに利用します。
const auto_ptr
と似たようなものですが、たぶん
こっちの方が効率がよいのではないかと。