|
Boost Users : |
From: Peter Dimov (pdimov_at_[hidden])
Date: 2003-07-17 10:07:38
Jason Winnebeck wrote:
[...]
> I'm having a problem with trying to mitigate reference cycles in a
> event generator/event listener paradigm. One creates a listener
> object, and registers itself as a listener of that object. As a
> result of the event, it may want to invoke methods of that object, so
> it contains a reference to that object.
>
> So Generator contains a reference to Listener, and Listener contains a
> reference to Generator. This is a problem with reference counted
> pointers.
There are no inherent cycles so far in the design. A typical Listener
interface is
struct Listener
{
virtual void accept(Event const & event, Generator & sender) = 0;
};
so that it can listen to several Generators at a time. The assumption is
that Listener::accept cannot destroy 'sender'.
Logically, if a Generator does not own its Listeners, it should keep weak
pointers. The advantage is that dead Listeners that haven't unregistered can
be auto-unsubscribed by the Generator (unless you have real measurements
that indicate a performance problem with weak_ptr::lock(), which would
surprise me :-).)
HTH
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net