On April 28, 2014 11:20:35 AM EDT, Jeff Hill
Ross MacGregor wrote
"Johan RĂ¥de"
I know it is an insane idea to suggest changing the entire boost::smart_ptr library to a boost::smart_ref library, but I think it may actually be the right thing to do. Does anyone agree?
I also find the nill state of shared_ptr to be a liability when designing interfaces. The primary purpose of shared_ptr when used in an interface context is to convey ownership, and almost always it feels wrong to also provide simultaneously an option to convey ownership of nothing. The poor user is left with the responsibility of testing every shared_ptr he has received for null state before using it, but its easy to forget and the compiler provides no assistance.
You've overlooked the use case of reclaiming ownership from smart_ptr. There's nothing left for it to own after that. (You can't replace it with a default constructed instance, as there may be no default constructor. Any other value you choose would be a sentinel value and you'd want to detect that in many contexts, so checking for null is more straightforward.) OTOH, you could justify a new class that has no reset() and that rejects null pointers, so it is never null, yet has shared ownership semantics. ___ Rob (Sent from my portable computation engine)