Scoped_ptr は、shared_ptr、weak_ptr、または unique_ptr とほとんど共通点がありません。これは、「参照カウント」の非常に特殊なケースのみを実行しているためです。これは、適切に設計されたコードで頻繁に必要になるものではありませんが、利用できる優れたツールです。
基本的に、scoped_ptr は参照カウントされるものではありません。むしろ、これはスタック上 (ローカル スコープ内) に作成するオブジェクトなので、次のようなことができます。
//Some enclosing scope- anything set off by "{}" or even a function:
{
scoped_ptr<MyObject> ptr = new MyObject( parameters...);
} // When we hit this closing brace, "ptr" will delete the "MyObject" inside.
このパターンは、ミューテックスやその他の同期プリミティブでよく見られます。渡されたミューテックスをロックする「AutoLock」を宣言し、削除時にロックを解除して「{}」スコープ全体をクリティカル セクションにすることができます。
また、「scoped_ptr」は、何らかの理由で「MyObject obj(params..)」のような単純な古いスタック割り当てを実行できない場合にのみ意味があることに注意してください。結局のところ、ヒープに割り当てられたオブジェクトをスタック上のオブジェクトであるかのように使用できるようにするためです。これは、shared_ptr とその従兄弟の参照カウントよりもはるかにまれな使用例になる傾向があります。