
Lorenzo Bettini wrote:
Jonathan Wakely wrote:
On Mon, Jun 06, 2005 at 03:58:41PM +0200, Lorenzo Bettini wrote:
However, it is not clear to me how to use weak_ptr in this context...
can some one provide some clue, please?
the main problem I had is just "ensure the shared_ptrs that own the objects are still around when you use the weak_ptrs.".
Moreover, I had to deal with mutual dependences, and this makes the whole thing worse...
A couple of options, none of them very pretty. 1) Ask Peter Dimov to give you his experimental cycle collection code for shared_ptr. Last I saw, this had exception safety issues because it didn't provide a no-throw guarantee, which you would need if you were to use it from a destructor (which is likely). 2) Grab tracking_ptr.hpp from boost-sandbox/boost/xpressive/detail/utility (can also be found in xpressive.zip from the Boost Sandbox File Vault). I had to solve the same problem for xpressive, where regex objects can embed other regex objects, either "by value" or "by reference". This leads to all sorts of interesting cyclic ref-count scenarios. I use tracking_ptr to handle this. Unfortunately, tracking_ptr is not documented. I forces you to separate your object into a handle-body, where the body inherits from enable_reference_tracking<Body>, and the handle holds a tracking_ptr<Body>. There's more, but maybe you can figure out the rest by seeing how xpressive uses tracking_ptr. HTH, -- Eric Niebler Boost Consulting www.boost-consulting.com