Рассмотрим алмазный сценарий ниже:
class Base {
int x;
public:
virtual ~Base(){}
};
class Derived1 : virtual public Base {
int y;
};
class Derived2 : virtual public Base {
int z;
};
class Derived3 : public Derived1, public Derived2 {
int t;
};
Теперь, если я добавлю еще один класс Derived4 который вытекает из Производная 3,
class Derived4 : public Derived3 {
int s;
};
это размер выходит 32 (который я предполагаю быть размер Derived3 + s).
Я хочу знать, если внутри нет виртуального указателя Derived4?
Если я возьму нормальную иерархию классов (без алмазной структуры), то если базовый класс имеет виртуальную функцию, то все производные классы имеют vptrs. Так почему бы не в этом случае?
Я компилирую код в codeBlocks 12.11 с помощью компилятора GNU GCC.
Поскольку Derived4 не добавил никаких виртуальных функций или виртуальных базовых классов, помимо того, что он унаследовал от Derived3, единственное увеличение в размере относится к элементам s.
Других решений пока нет …