виртуальное наследование и расположение памяти - PullRequest
0 голосов
/ 06 октября 2018
  GCC/32Bit architecture  

class B
    {
        int x,y;
    };
    class D1: public virtual B
    {
        int z;
    };
    class D2; public virtual B
    {
        int z;
    public:
    virtual void func(){}
    };

    int main() {
        B b; D1 d1; D2 d2;
        cout<<sizeof(b)<<endl;
        cout<<sizeof(d1)<<endl;
        cout<<sizeof(d2)<<endl;
        return 0;
    }  

Насколько я понимаю, B имеет 2 целых числа: 8 байтов D1: offet to B (B _vPtr), x, y, z => 16. D2: B _vBase, VPTR,х, у => 16

       Ans i am getting is 8, 24, 24.
       What is the size of the class and how memory allocated for this classes. 
    How is Vptr and Vtable managed in these cases.

1 Ответ

0 голосов
/ 06 октября 2018

Какой компилятор вы используете?Visual Studio?НКУ?лязг?Какая целевая архитектура (в основном 32 или 64 бита)?Вы также можете взглянуть на Размер классов в случае виртуального наследования .

Я не смотрю на макет, но я бы сказал, что между указателем есть отступ.родитель и его фактические данные должны иметь 8-байтовое выравнивание данных.Это будет означать 4 байта + заполнение (4) + 8 байтов родительских данных + локальные данные + заполнение?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...