空类和派生虚拟类的大小

Gee*_*her 3 c++ oop class sizeof

1.为什么Derived4类的大小显示8个字节?

class Empty
{};
class Derived4 : virtual public Empty
{
    char c;
};
Run Code Online (Sandbox Code Playgroud)

2. Derived2类的大小显示4个字节?

class Empty
{};
class Derived2 : virtual public Empty
{};
Run Code Online (Sandbox Code Playgroud)

Naw*_*waz 5

请注意,这sizeof(any_class)是实现定义的.

但在你的情况下实际发生了什么.好吧,它使用的是virtual继承,大多数实现使用隐藏指针来实现这个特性花费sizeof(pointer)字节(指针存储在派生类本身),加上所有成员的大小(如果有的话), 如果需要加上填充,加上 sizeof base class(es)(在空基类的情况下,由于空基优化,可以减少到零).

有关更详细的答案,请在此站点上搜索"在C++中填充".你会发现很多主题.