Pergunta sobre herança múltipla, classes base virtuais e tamanho do objeto em C ++

O código a seguir imprime 20, ou seja, sizeof (z) é 20.

#include <iostream.h>
class Base
{
      public:
            int a;
};

class X:virtual public Base
{
      public:
            int x;
};

class Y:virtual public Base
{
      public:
            int y;
};

class Z:public X,public Y
{
};

int main()
{
Z z;
cout << sizeof(z) <<endl;
}

Considerando que, se eu não usar classes base virtuais aqui, ou seja, para o seguinte código: sizeof (z) é 16.

#include <iostream.h>
class Base
{
      public:
            int a;
};

class X:public Base
{
      public:
            int x;
};

class Y:public Base
{
      public:
            int y;
};

class Z:public X,public Y
{
};

int main()
{
Z z;
cout << sizeof(z) <<endl;
}

Por que sizeof (z) mais (20) no primeiro caso? Não deveria ser 12, já que o Base será incluído apenas uma vez em Z?

questionAnswers(3)

yourAnswerToTheQuestion