gpt4 book ai didi

c++ - 多级/多继承期间对象的大小

转载 作者:太空宇宙 更新时间:2023-11-04 11:38:02 25 4
gpt4 key购买 nike

下面是一个多级继承的伪声明。 编辑:编译器 VS C++

Base class ( protected int data)

derived1 : virtual public base ( protected int data1 )

derived2 : virtual public base ( protected int data2)

derived3 : derived1,derived2 ( private int data3 )

Main(){ base b; derived1 d1; derived2 d2; derived3 d3; }

sizeof(b) // 4 which is correct as only int (4bytes)
sizeof(d1) // 12 why not 8 -> 4(base) + 4(derived)
sizeof(d2) // ??? whatever applies above should apply here
sizeof(d3) // 24 why not 12 -> 4(base) + 4(derived1/derived2) + 4(d3).

大小是否也包括虚拟表。同样这里不能有虚表,因为没有定义虚函数。请帮助澄清我的疑问。

PS:目前我的理解是:

Unless the function is declared virtual in base class,

base *bptr;
derived d;
bptr = &d;
bptr->fun(); // will call the base class function.

But if the fun() is declared virtual then the above code will call derived class fun().

最佳答案

C++ 编译器可以根据需要添加尽可能多的填充或额外数据,并且经常会对齐内存以获得最佳 RAM 访问。永远不要假设一个对象的大小,除非它 >= 到它的部分的大小。在这里它可能添加了额外的 4 个字节以与 8 字节边界对齐,因此它可以与 64 位寄存器对齐。

关于c++ - 多级/多继承期间对象的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22432913/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com