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

Please confirm/correct this: C++ vs Java

本文关键字:C++ Java 更正 确认      更新时间:2023-10-16

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

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

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

我的推断是正确的还是不正确的?我自己也不确定这是否100%正确。

现在,我真的对这整件事很感兴趣。你能再往前走一步,告诉我我错过了什么吗?我的意思是,这种差异的意义是什么?这是否意味着Java中的类A比C++中的相同类A实现占用更少的空间?

是的,你基本上是正确的。Java类

class C{
  D dRef;  // needs to be assigned a valid object reference.
}

dRef被分配了一个新的ed对象引用。

将被构造为类似于c++类

class C2
{
  D* dPointer;  // needs to be assigned a valid pointer value.
};

可以为dPointer分配一个新的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.大小相同。