[英]If derived classes do not add new members, will instances take up the same memory as the base class?
考虑下面的示例代码。
b
和d
是否应该具有相同的存储大小? 它是否定义它们不应该具有相同的大小(由于需要一些额外的存储空间)?b
和d
使用相同的大小? 这取决于课程的内容吗? 什么是可能的例外? (编译器,和/或特定的声明/定义).
class base {
// Any possible list of data members (static, inline, etc.) and
// methods (virtual, pure virtual, inline, non-virtual, etc.)
};
class derived : public base {
public:
// Only new methods (whatever... constructors, overrides, etc.),
// no new data members
};
base b;
derived d;
AFAIK,该标准根本不保证 class 实例的大小。
在常见的实现中,class 实例的每个非 static 数据成员都具有 memory + 指向其 ZA2F2Z1ED4F8EBC2CBD1.0 的指针 vTable 没有由标准定义,只是一个实现细节。 它通常包含 class 中定义的虚拟方法的地址,以及所有基类 vTable 的版本及其虚拟方法的实际实现。 它还包含 class 的实时类型信息。
这意味着在最常见的实现中,不向其基 class 添加任何成员的子类的实例应该与该基 class 的实例具有相同的大小。 但由于它只是一个未记录的实现细节,你不应该依赖它。
顺便说一句,我什至不确定所有常见的实现是否只有一个指向 vTable 的指针,或者指向 class vTable 和所有基本 class 的不同指针。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.