繁体   English   中英

如果派生类不添加新成员,实例是否会占用与基础 class 相同的 memory?

[英]If derived classes do not add new members, will instances take up the same memory as the base class?

考虑下面的示例代码。

  1. 标准是否定义bd是否应该具有相同的存储大小? 它是否定义它们应该具有相同的大小(由于需要一些额外的存储空间)?
  2. 如果标准没有明确指定任何内容,实际编译器是否通常对bd使用相同的大小? 这取决于课程的内容吗? 什么是可能的例外? (编译器,和/或特定的声明/定义)

.

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM