请确认/更正:C ++ vs Java

时间:2015-03-01 19:39:15

标签: java c++

当用户定义的类(A)具有另一个用户定义的类(B)的Object作为其数据成员之一时,则:

  

在Java中:实际上,只有对B实例的引用才是A的数据成员,而不是B本身的实例。

     

在C ++中: B的整个实例是数据成员。没有指针或任何东西。只是B本身的整个实体实例,除非它动态实例化,在这种情况下,指针是数据成员。

我的演绎是正确还是不正确?我不确定自己是否100%正确。

现在,我真的很感兴趣。你能更进一步告诉我一些我错过的东西吗?我的意思是,这种差异有什么意义?这是否意味着,Java中的A类比C ++中的A类实现占用更少的空间?

1 个答案:

答案 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的大小相同。