Re: GObject: NULL virtual methods during instance init
- From: Owen Taylor <otaylor redhat com>
- To: Gustavo J A M Carneiro <ee96090 fe up pt>
- Cc: gtk-devel-list gnome org
- Subject: Re: GObject: NULL virtual methods during instance init
- Date: 10 Aug 2001 17:45:19 -0400
Gustavo J A M Carneiro <ee96090 fe up pt> writes:
> I'm getting something weird. I have class A and class B, where class B
> is derived from class A. Class A defines a virtual method, "vfunc",
> which is pure virtual and only implemented in class B.
> I created an instance of class B. During class A's instance init func
> (but called with a B object) I try to invoke vfunc this way:
> AClass *class;
> class = A_GET_CLASS(self);
> if (class->vfunc)
> class->vfunc(self, args);
> But at this point class->vfunc is NULL. I do initialize it correctly at
> class B's class_init function.
> Generally, I've been using GObject with virtual methods for some time
> and had no problem at all until now.
> Am I doing anything wrong here? What?
> Thanks in advance for any help.
In gtk_type_new() in GTK+-1.2 there is an explanation for this behavior.
I think it's a little weird, but hard to change now.
/* we need to call the base classes' object_init_func for derived
* objects with the object's ->klass field still pointing to the
* corresponding base class, otherwise overridden class functions
* could get called with partly-initialized objects. the real object
* class is passed as second argment to the initializers.
] [Thread Prev