当用户定义的类(A)具有另一个用户定义的类(B)的Object作为其数据成员之一时,则:
在Java中:实际上,只有对B实例的引用才是A的数据成员,而不是B本身的实例。
在C ++中: B的整个实例是数据成员。没有指针或任何东西。只是B本身的整个实体实例,除非它动态实例化,在这种情况下,指针是数据成员。
我的演绎是正确还是不正确?我不确定自己是否100%正确。
现在,我真的很感兴趣。你能更进一步告诉我一些我错过的东西吗?我的意思是,这种差异有什么意义?这是否意味着,Java中的A类比C ++中的A类实现占用更少的空间?
答案 0 :(得分:2)
是的,你基本上是正确的。 Java类
class C{
D dRef; // needs to be assigned a valid object reference.
}
为dRef分配了 new ed对象引用。
将构造类似于c ++类
class C2
{
D* dPointer; // needs to be assigned a valid pointer value.
};
可以为dPointer分配 new ed对象指针值。 而c ++类
class C3
{
D dValue;
};
将包含创建C3时创建的D的整个布局大小。
在两种情况下,c ++版本可能比java版本占用更少的空间。对于可用的java版本,例如cObject.dRef.dMethod()
需要创建一个D对象new D()
。 C对象和实例都会有开销。例如,垃圾收集簿记。
c ++变体只需要将指针值存储在C2中(以及new D
)。对于C3,C3可以与D的大小相同。