Re: [gtkmm] Bug 116280
- From: Daniel Bausch <DanielBausch gmx de>
- To: Chris Vine <chris cvine freeserve co uk>
- Cc: gtkmm-list gnome org
- Subject: Re: [gtkmm] Bug 116280
- Date: Fri, 18 Jul 2003 14:29:33 +0000
Am Friday, 18. July 2003 08:53 schrieb Chris Vine:
> On Friday 18 July 2003 2:08 am, Daniel Bausch wrote:
>
> [snip]
>
> > There is possibly another problem:
> >
> > The standard says that the finally derived class must call the
> > constructors of all inherited virtual objects. It's not enough when the
> > constructor of B calls the constructor of virtual A, but also the
> > constructors of C, D and E must call it. Otherwise A's default
> > constructor will be called regardless of the definition in B's
> > constructor.
> > This is logical because B's constructor does not know that there are two
> > instances of class B. If both would initialize virtual A it could be
> > fatal. This makes virtual inheritance a problematic feature, because
> > someone who derives from a class has to look up the class tree for
> > virtual objects that must be initialized with meaningful values. This
> > also makes clear why it is in fact only clever to define virtual
> > inheritance for simple classes, that only have a default constructor.
> > This is another argument, why virtual inheritance may be difficult to
> > introduce in a existing class tree and may break API. It should also be
> > clear that it definitely breaks ABI.
>
> I am not entirely sure what you are saying, but if it is that the
> constructor of the virtual base class is called multiple times, then that
> is wrong. The language rules require the constructor of a virtual base
> class to be called exactly once, from the constructor (or initialisation
> list) of the most derived class virtually inheriting it - to that extent
> initialisation is different from that for non-virtual inheritance (in
> standard non-virtual inheritance only the immediate parent may initialise a
> child). No other arrangement would be possible, as there is only one
> virtual base sub-object.
Is my english that bad?
I said exactly this. My comment was meant to be only a hint, because I saw,
that you were going to introduce virtual inheritance in an existing class
hierachy. I did not analyze the concrete problem.
> You were probably saying something else, but I am afraid it did not come
> through to me. If you were saying that virtual inheritance is a pain
> because you have to look through the entire inheritance heirarchy to see if
> there is any virtual base object you need to initialise, then you are
> right.
Correct. Blame me for my bad expression. (From my point of view it was compact
but not too difficult to understand.)
Daniel
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]