On Sat, 2009-01-10 at 18:35 +0100, Jürg Billeter wrote: > On Sat, 2009-01-10 at 12:19 -0500, Yu Feng wrote: > > On Sat, 2009-01-10 at 09:24 +0100, Jürg Billeter wrote: > > > On Sat, 2009-01-10 at 01:04 -0500, Yu Feng wrote: > > > > On Fri, 2008-12-12 at 08:08 +0100, Jürg Billeter wrote: > > > > > On Thu, 2008-12-11 at 23:56 -0500, Yu Feng wrote: > > > > > > Talking about circular references, is it possible to have a > > > > circular ref > > > > > > breaker mechanism like the one in GTK for vala fundamental classes? > > > > > > > > > > I don't think we should always add a dispose mechanism to fundamental > > > > > classes. However, if someone wants to use that, it should still be > > > > > possible to implement this with a bit of extra Vala code. > > > > > > > > > > > > > I suddenly realized it is impossible to write dispose mechanism with > > > > extra vala code because one can not override the hidden unref method, > > > > therefore one can not do the cycle detection/breaking at the right time. > > > > > > unref methods are never virtual in GObject. However, you can override > > > the dispose method in Vala. Is this what you meant or can you explain > > > what exactly you want to achieve? > > > > > > > No. We were talking about GTypeInstance fundamental classes in that > > mail. They don't have a 'dispose' method to be overriden. > > Right, but I'm not sure that you need to change anything in the unref > function to get dispose functionality working. Can you explain more > specifically what you can't get working with the current possibilities? >
Yes I can do this: class Object { Object ref_to_there; Object ref_to_here; private disposed = false; public virtual void dispose() { /*release references here*/ ref_to_there = null; ref_to_here = null; } private void run_dispose() { if(disposed) return; disposed = true; dispose(); } public void destroy() { Object holder = this; /*needed if invoked from a weak reference of this*/ run_dispose(); holder = null; } } Then Object.destroy can be used to manifestly break any cycle references. I was thinking about auto-cycle-breaking but it is unfortunately beyond my knowledge. > Jürg > _______________________________________________ Vala-list mailing list Vala-list@gnome.org http://mail.gnome.org/mailman/listinfo/vala-list