The whole point of shared_ptr
is that it (and its copies) own the object that it points to. If you want to give an A
to a container that manages its lifetime then you shouldn't be using a shared_ptr
at all as it doesn't meet your needs; HelpfulContainer
only knows how to be the sole owner of a dynamically created object so you need to give it a pointer to an object that isn't owned by anything else.
I think that it is usually poor design for an object to care about its own lifetime (there are exceptions). It is usually more useful if an object can do a job and something else manages its creation and descruction, choosing the simplest lifetime strategy possible (e.g. local/automatic variable).
If you absolutely have to share ownership between two things that don't co-operate (such as shared_ptr
and HelpfulContainer
) then you will have to use some sort of proxy technique.
In this case, though, it just looks like HelpfulContainer
just isn't that helpful for your situation.