What I'd really like to do is to be able to replace ref_ptr<T> with 
shared_ptr<T>/weak_ptr<T>, although this is a non-trivial refactoring.
The code typedefs ref_ptr<T> away in a number of places, so it's not 
100% obvious where it is being used.

The callback code also uses ref_ptr<T> extensively -- that's probably a 
candidate for the Boost mixin enable_shared_from_this<T>, which is now 
part of C++0x TR1.

It is used to embed a weak_ptr<T> to 'this' in every class which is 
potentially shared as a refcounted object. The object can then use the 
shared_from_this<T>() template method member to obtain a shared_ptr<T> 
to itself without bumping the refcount itself.

The reason Boost users usually do this is to return the shared_ptr<T> to 
the object in situations where it would otherwise return or pass its 
'this' pointer.
We don't want the object to embed a shared_ptr<T> to itself, because 
this means there is a dangling refcount; this is why the embedded 
weak_ptr<T> is declared 'mutable'.

There are a number of places in the code where we use refcounting, or we 
need it and it isn't there; the ref_ptr<T>& semantics are potentially 
harmful, as the intent isn't clear, especially for folk who are either 
new to the code, or are getting back into it after being away for months.

_______________________________________________
Xorp-hackers mailing list
[email protected]
http://mailman.ICSI.Berkeley.EDU/mailman/listinfo/xorp-hackers

Reply via email to