派生类的实例化是否为基类的私有成员分配内存

Does an instantiation of a derived class allocate memory for private members of base class?

本文关键字:成员 分配 内存 实例化 是否 派生 基类      更新时间:2023-10-16

我想这个话题就是我需要问的。围绕这个话题做一些解释会很好。请清除一些问题,例如为什么或为什么不?

例:

class A {
 private:
  int a;
};
class B : A {
 int b;
};
int main (int argc, char **argv) {
 B *p = new B(); // Does this allocate memory for a?
}

是的。类对象包含其所有直接非静态数据成员,以及任何基类子对象的非静态数据成员。访问说明符没有区别;它们只是限制名称的使用位置。

这取决于你对分配的意思:它做堆分配或其他东西。派生对象将包含从基继承的成员。也就是说,派生类的所有基类都可以被视为子对象。派生类对象将包含所有这些子对象,并确保它们被正确构造/销毁。

是的,它也将为 A 分配内存。

因为当你从另一个类继承一个class,当你创建派生类的object时,Complier 会分配等于派生类+基类大小的内存,这样就会有no loss of data. 因为base class members也可以从derived class.访问