This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: Non-default ctors, virtual base classes, & multiple inheritance all at once!
- To: aoliva at redhat dot com (Alexandre Oliva)
- Subject: Re: Non-default ctors, virtual base classes, & multiple inheritance all at once!
- From: Joe Buck <jbuck at racerx dot synopsys dot com>
- Date: Wed, 6 Sep 2000 08:37:30 -0700 (PDT)
- Cc: scherrey at switchco dot com, gcc at gcc dot gnu dot org
>
> On Sep 5, 2000, Benjamin Scherrey <scherrey@switchco.com> wrote:
>
> > I can pass a parameter up the tree to the virtual base class, in
> > others, the default ctor is always called even though my code
> > clearly specifies the ctor taking a parm. Is this a compiler bug or
> > a language design issue?
>
> The latter. It is the most derived class that must construct all
> virtual base classes, even indirect ones. If it doesn't, default
> constructors are used, even if other base classes specify constructor
> arguments for virtual bases.
This is one of the major botches in C++. The only way around it that will
scale is to have a policy that, whenever virtual base classes are used,
the virtual base must have a default constructor and this constructor must
be the one that is used in the constructor for any derived object that
uses the virtual base. Otherwise you have a major violation of
encapsulation and all derived classes have to worry about initializing the
virtual base correctly, and if anyone makes a derived class that doesn't
do this, things don't work right.
The compiler, of course, has to support people who violate this design
rule.