On Jan 18, 2013, at 1:28 AM, Rick Mann <rm...@latencyzero.com> wrote:
> Can anyone explain this error? It sure looks to me like all the base class 
> constructors are being explicitly called.
> 
>       http://pastebin.com/cVMmgqCZ

This is off-topic for this list, but since I'm here anyway, I'll answer.  In 
the future, though, please take this to a venue that's more specific to C++.

In C++, a constructor must directly initialize all of the virtual bases of the 
class it appears in;  it cannot "inherit" initializers of virtual bases from 
its base-class constructors.  In turn, since all the virtual bases were already 
initialized by the most-derived class, those initializers are ignored when 
constructing base classes.

There are many reasons for this which could fill, if not a book, at least a 
small pamphlet;  suffice it to say that that's how it is.

And yes, this does make virtual bases without public default constructors very 
annoying to use.  (This is actually sometimes used as a hacky way to disable or 
limit subclassing:  first, add an empty virtual base with a private default 
constructor;  next, have that class befriend every class that you wish to allow 
to subclass your type.  If your class had a vtable anyway, this doesn't even 
bloat your object size, although it does make your vtables a bit bigger.)

I believe that most expert C++ programmers would say that virtual inheritance 
is something that you should use very carefully, if you really must use it at 
all.  Using it pervasively as your standard method of inheritance is almost 
certainly a sign of a poor class design.

John.
_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to