Virtual Inheritance
If a path exists in the multiple inheritance hierarchy that
derives the common base class as not virtual (i.e., leaving
out the keyword virtual), then this turns off virtual
inheritance for that path and more than one instance of
the common_base will be formed.
Virtual base classes are constructed before any of their
derived classes. They are also constructed before any non
virtual base classes. And, destructors are still invoked in
the reverse order of constructors.
Any direct or indirect base classes that have initialization
lists that invoke the virtual base class constructor are
ignored.