サンプルの動作確認バージョン [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 と似たようなものですが、たぶん
こっちの方が効率がよいのではないかと。