Tamaños de clase con herencia virtual en C ++
#include<iostream>
using namespace std;
class abc
{
int a;
};
class xyz : public virtual abc
{
int b;
};
int main()
{
abc obj;
xyz obj1;
cout<<endl<<sizeof(obj);
cout<<endl<<sizeof(obj1);
return 0;
}
Las respuestas dependerían del compilador, pero me sorprendió ver esto como resultado
~/Documents/workspace/tmp ‹.rvm-› $ ./class_sizes
4
16
Si elimino la palabra clave virtual, el tamaño asignado es 4 y 8 respectivamente, que es lo que esperaba.
¿Por qué se ocupa exactamente el espacio extra? Sospecho que es para la tabla vptr o algo por el estilo, pero no lo sé con certeza.