When a pointer is assigned to a smart pointer, the reference counter associated with the pointer is incremented by one (the reference counter is 0 when no smart pointer was assigned to the pointer). When the smart pointer goes out of scope and is deleted, the reference counter for the pointer tracked by sp decreases by one: in the end, the memory referenced by the pointer is deleted when the reference counter goes back to 0.
In your case, if only aPtr is assigned to the SomeClass object, then perhaps the auto pointer will do the job with slightly less overhead. However, if you declare the list as std::list<std::tr1::shared_ptr<SomeClass> > , you could avoid copying SomeClass (only the reference count of the object will be increased) and make full use of the smart pointer.
source share