У меня есть «базовый» класс с виртуальным деструктором и, следовательно, VTable и соответствующий VTPR в нем, а также производный от него класс:
class base {
public:
virtual ~base() {}
};
class der : base {};
main()
{
int a = sizeof(base); // = 4, fine !
int b = sizeof(der); // = 4 too ?
}
Теперь, поскольку производный класс также является виртуальным, он будет иметь собственный VPTR, но, поскольку он также имеет подобъект базового класса с VPTR, не должен ли размер класса 'der' быть 8 байтов, т.е. размер VPTR класса 'der' + размер VPTR подобъекта класса 'base'? (когда sizeof (void *)= 4 байта ).
Итак, в основном мой вопрос: :Когда подобъект класса 'base' создается в 'der', есть ли у него отдельный новый VPTR? И если это так, то почему его размер не добавляется при вычислении размера der?
Может кто-нибудь, пожалуйста, проясните это.