
On Fri, 2008-04-11 at 19:11 +0300, Peter Dimov wrote:
I'm still not 100% convinced that we need this functionality in shared_ptr.
How many % is it currently? ;)
But if we do, it seems that the proper way to add it is to make shared_ptr issue an unqualified call to
sp_accept_owner( this, p );
which the user will now be free to add to the namespace of *p or one of its base classes. Your code, for example, would now have
template<class T> void sp_accept_owner( shared_ptr<T> * p, shared_ptr_debugger * q );
in the namespace of shared_ptr_debugger, and another overload in the namespace of C4 that would resolve the ambiguity.
That's a very good idea. And it's not very different from the current code anyway. Moving code around a bit, I ended up with the attach patch against HEAD. It also seems cleaner to me (compared with the HEAD version), as enable_shared_from_this is no longer forward declared in shared_ptr.hpp and the registration of the observer can be moved to enable_shared_from_this.hpp. I'll try to write an alternative enable_shared_from_this class with only a single plain pointer overhead based on the attached patch. At least to me enable_shared_from_this' efficiency/overhead is far more important than additional features that I never needed so far. Having a choice seems highly desirable. Regards, Daniel