I was just watching the "Going Native 2012" streams and I noticed the discussion about std::shared_ptr
. I was a bit surprised to hear Bjarne's somewhat negative view on std::shared_ptr
and his comment that it should be used as a "last resort" when an object's life-time is uncertain (which I believe, according to him, should infrequently be the case).
Would anyone care to explain this in a bit more depth? How can we program without std::shared_ptr
and still manage object life-times in a safe way?
Best Answer
If you can avoid shared ownership then your application will be simpler and easier to understand and hence less susceptible to bugs introduced during maintenance. Complex or unclear ownership models tend to lead to difficult to follow couplings of different parts of the application through shared state that may not be easily trackable.
Given this, it is preferable to use objects with automatic storage duration and to have "value" sub-objects. Failing this,
unique_ptr
may be a good alternative withshared_ptr
being - if not a last resort - some way down the list of desirable tools.