java - 内存分配 - Java 与 C++

标签 java c++ memory heap-memory

给定 java 和 C++ 中的 Line 类,以及分别在 java 和 C++ 中的以下声明 -

Line[] p; 

Line *p;

运行以下代码时,两种语言之间的语义有何差异:

p = new Line[7];

特别是,这两种语言是否以相同的方式为数组分配堆内存?

抱歉,我对这个问题进行了研究,但我仍然觉得我还没有完全理解。

谢谢!

最佳答案

您正在比较不等价的 Java 和 C++ 代码。 以下 C++ 相当于您的 Java 代码(引用数组):

Line **p;
p = new Line*[7];

您发布的 C++ 版本:

Line *p;
p = new Line[7];

是一个对象数组,并使用“Line”的默认构造函数初始化数组的每个元素(尝试使用显式的 1 参数构造函数,您将看到 C++ 告诉您需要一个默认构造函数)。 Java 没有与这种创建非基本类型数组(使每个元素默认构造)的方法等效的方法 - 在 Java 中,非基本类型数组的所有元素都是“null”,除非您显式分配它们)。

关于java - 内存分配 - Java 与 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30679342/

相关文章:

c++ - 与 QProcess 和 VS C++ 进行实时通信时遇到问题

windows - C/C++程序中怎么会有静态地址?

使用App时Java内存使用量增加,但不使用时不减少

java - Android可达性测试

java - 将 JSON 映射到 java 类

java - 扫描仪在使用 next() 或 nextFoo() 后跳过 nextLine()?

java - 同一个 BufferedImage 对象加载多个图像时出现内存泄漏

java - 如何将多个组件添加到 JFrame?

c++ - asio set_password_callback() 方法是什么?

c++ - 为什么我的代码无法在二进制搜索树中正确执行预购表格?