C ++类和子类的大小

时间:2011-09-01 16:00:11

标签: c++ oop memory

如果一个类实例使用20个字节,并且它的子类使用24个字节,因为它作为更多成员,如何将子类的实例存储在父类的变量中?

像:

Subclass s;
ParentClass p ;
p = s;

3 个答案:

答案 0 :(得分:8)

您不会在“指针”中“存储”实例。指针只是指向内存中实例的开始

指针对象本身包含一个内存地址,无论在该地址上找到什么数据或者多少数据,它占用的空间总是相同的。


修改 (因为问题几乎完全改变了)

在您添加到问题中的示例中,代码没有按照您的想法执行。您没有在Subclass中存储ParentClass;相反,您正在切除s的派生位,并仅将其基本位复制到p

您曾在其他地方询问过如何将Derived放入Base的数组中; 你不能

答案 1 :(得分:6)

指针大小始终相同。它只是指向一个更大的内存区域。

比较

+-----+
| ptr | ------+
+-----+       |
              v
              +----------+
              | Base     |
              +----------+

使用:

+-----+
| ptr | ------+
+-----+       |
              v
              +----------+----+
              | Derived       |
              +----------+----+

两种情况下的指针值都是虚构的地址,它标记了承载相应对象的内存区域的起始地址。

答案 2 :(得分:2)

类实例(即对象)不存储在指针中。它们只占用内存,子类实例一般比类实例多。指针 - 顾名思义 - 只指向内存中的这些对象。可以将指针与存储块的地址进行比较。并且地址总是占用相同的字节数。