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
[email protected]
http://mail.gnome.org/mailman/listinfo/vala-list