shared_ptr vs scoped_ptr

boost, c++, scoped-ptr, shared-ptr, smart-pointers

Solution

`shared_ptr` is more heavyweight than `scoped_ptr`. It needs to allocate and free a reference count object as well as the managed object, and to handle thread-safe reference counting - on one platform I worked on, this was a significant overhead.

My advice (in general) is to use the simplest object that meets your needs. If you need reference-counted sharing, use `shared_ptr`; if you just need automatic deletion once you've finished with a single reference, use `scoped_ptr`.

Problem

`scoped_ptr` is not copy able and is being deleted out of the scope. So it is kind of restricted `shared_ptr`. So seems besides the cases when you really need to restrict the copy operation `shared_ptr` is better to use. Because sometimes you don’t know you need to create a copy of your object or no. So the question is: besides the cases mentioned above, could we consider that `shared_ptr` is better (or recommended) to use instead of `scoped_ptr`. Does `scoped_ptr` work much faster from `shared_ptr`, or does it have any advantages? Thanks!

Original source