c++ - 为什么具有虚拟继承的派生类的大小出乎意料?

标签 c++ inheritance

<分区>

由于空类的大小是 1 个字节,但是当这个空类实际上被继承时(在 gcc 编译器上)sizeof(derived1) 的答案是 8 个字节... ,这是怎么发生的,因为 sizeof(derived1) 必须是 sizeof(char)+sizeof(virtual pointer),即 1+4..即 5 字节。,那么,这额外的 3 个字节是从哪里来的...???

#include <iostream>
using namespace std;

class Empty
{};

class Derived1 : virtual public Empty<br>
{
    char c;
};

int main()
{
    cout << "sizeof(Empty) " << sizeof(Empty) << endl;
    cout << "sizeof(Derived1) " << sizeof(Derived1) << endl;
    return 0;
}

最佳答案

就 C++ 标准而言,这一切都是未指定的, 但通常虚拟继承会添加一两个指针,这 反过来又施加了额外的对齐约束;的大小 具有虚继承或虚函数的类将 几乎肯定必须是指针大小的倍数 (在大多数系统上为 4 或 8)。

关于c++ - 为什么具有虚拟继承的派生类的大小出乎意料?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24929867/

相关文章:

c++ - reinterpret_cast/static_cast 和未定义的行为

c++ - 如何在 Konsole 中转发 `<Ctrl>-<Tab>`?

java - 如何从父类(super class)获取参数?

python - 如何测试 python 类型协议(protocol)是另一个协议(protocol)的子类?

objective-c - 来自Object-C类的非指定的初始化程序继承

c++ - 函数可以接受抽象基类作为参数吗?

c++ - 使用 std::get_temporary_buffer 从文件中读取数据

c++ - 在 C++ 中使用指针返回二维 vector

c++ - 如何在 cmake 中使用 COMPONENTS 配置项目

python - Boost.Python 中的基类和派生类