
Daniel Frey:
On Sat, 2008-04-12 at 21:37 +0300, Peter Dimov wrote:
This introduces overhead to both ctors which take a deleter, they are now calling get_deleter in order to pass it to sp_accept_owner.
Yes, it does. This is an implementation artifact. The Overhead(tm) can easily (if not particularly elegantly) be avoided by piercing the shared_count abstraction a bit, if one gets motivated enough by an extra virtual call.
This is IMHO not needed, the called sp_accept_owner can call get_deleter on the shared_ptr itself.
If passing the type of the deleter itself is really needed, it can be done without overhead, e.g. pass (D*)0.
This would be letting the implementation drive the interface. Not a good idea in general, unless the interface is inherently inefficient. It isn't.