Herencia virtual

El problema es que la semántica de la herencia múltiple convencional no modela la realidad.

Antes de seguir es útil tener en cuenta cómo se representan las clases en C++.

Con dos punteros vtable (vtable*) por objeto, el tamaño del objeto aumenta en dos punteros, pero así solo hay un Animal y no hay ambigüedad.

Si otra clase hereda de Mamífero, como Ardilla, la vtable* en el objeto Mamífero de Ardilla será diferente del vtable* en el objeto Mamífero de un Murciélago, aunque podrían ser esencialmente el mismo en el caso especial de que la parte Ardilla del objeto tuviera el mismo tamaño que la parte Murciélago, ya que la distancia desde la parte Mamífero hasta la parte Animal sería la misma.

Las vtables no son realmente las mismas, pero la información esencial en ellas (la distancia), sí lo es.