C++继承的虚拟类的内存布局
C++ memory layout of inherited virtual class
关于派生类的大小,是有一个继承的"链"更好,还是继承最低派生类中的所有内容更好?
例如,以下两者之间有什么更好的:
class Base {
virtual void something() = 0;
};
class Derived1 {
// ...
};
class Derived2 : public Derived1, public Base {
// ...
};
和
class Base {
virtual void something() = 0;
};
class Derived1 : public Base {
// ...
};
class Derived2 : public Derived1 {
// ...
};
在第二种情况下,它是否必须存储两个 vtable 指针,在第一种情况下只有一个?
在第一种情况下,我的sizeof(Derived)
比第二种情况低。
据我所知,您所看到的只是一个空的基类优化。
看看我准备的神霹雳。当您没有空类时,大小是相同的。
https://godbolt.org/z/HhiJz6
具体解决您的问题Regarding the size of the derived class, is it better to have a "chain" of inheritance or inherit everything in the lowest derived class?
我想如果你有一个空的基类,你可以声称它在类的大小方面"更好",但这在很大程度上取决于类定义方式的具体情况,这些方式可能随时更改。
我不会基于它建立继承结构,除非我真的需要空间。
相关文章:
- C++继承的虚拟类的内存布局
- 检查nullptr是否100%保护内存布局不受segfault影响
- C++ Python 的扩展 - 安全内存访问和内存布局
- 类似元组的类模板的反向内存布局
- 在C++标准中记录对象的内存布局的哪个位置?
- C++ Lambda 的内存布局
- 打包类的内存布局 + 继承
- 假设传递给 OpenGL 的结构数组的内存布局存在潜在错误
- COM 互操作结构定义与内存布局不匹配
- C++非虚拟类成员变量内存布局?
- 结构中的内存布局差异
- 2D 区域的内存布局
- 如果"原子"<T>是无锁的并且与"T"的大小相同,内存布局是否相同?
- 是C 单继承的内存布局与此C代码相同
- 直观的内存布局,可实现快速SIMD/面向数据的设计
- 使用GDB并检查Data的内存布局
- 对齐方式究竟如何影响内存布局和新放置的巴哈维?
- 数组向量的内存布局是什么
- 为什么C 标准专门为具有不同访问说明符的类数据成员的内存布局提供了余地
- C++对象内存布局