给定 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/