请确认/更正:C++与Java
Please confirm/correct this: C++ vs Java
当一个用户定义类(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.大小相同。
相关文章:
- 在java中解决这段代码时面临循环中的问题
- 尝试用java代码编译和运行c++代码
- 在这种情况下,java对象是否可以调用本机函数
- 在java中读取c++字节的位字段
- 为什么C++对链表中的下一个节点使用指针,而像 C# 或 Java 这样的语言只使用类 Node 的名称?
- 使用已使用 java 编码的 openssl 解码数据
- SWIG Java 在使用 -DSWIGWORDSIZE64 时将int64_t转换为 jlong
- Android Java USB for native cpp
- 在由Sublime文本3编译后在cmd上显示Java程序输出
- C++ equivalent to Java Map getOrDefault?
- C++ 中的 Java 样式枚举
- 是否有技术原因阻止 Java 中的 final C++ 像 const 一样严格?
- 加密在 Windows、C++ 和 Java 中传输中的数据
- Java从C++回调到C++回调
- 在 c++ 中模拟输入并在 JAVA 中读取它?
- 用C++包装 Java 库 (JNI)
- 使用 TreeSet Java 对反转进行计数
- 验证openssl c++中的签名,这是由JAVA DSA签名的?
- 如何通过 JNI 将 C 字符串表情符号传递给 Java
- 如何从保存在 Java 中C++的字节数组中读取数字?