【发布时间】:2015-05-16 21:35:05
【问题描述】:
我对返回在函数调用中本地创建的数组和对象感到有些困惑。所以我相信——
C - 没有对象,只能在堆栈上创建数组和结构,因此在函数返回时将被删除。所以将它们作为返回值发送给调用模块是不明智的。
C++ - 对象 & 结构 驻留在堆中,因此可以返回对象但不能返回其他任何内容,即返回时数组仍将被销毁
Java - 我可以返回数组和对象,我猜数组移动到堆这里?
Python - 与Java相同,本地创建的对象和数组可以作为参考返回给调用模块。
如果我在某处错了,请纠正我。现在为什么 java/python 会将数组放入堆中?被解释语言是这个原因吗?那么每种编译语言都不会让我将本地创建的数组返回给调用模块。
提前致谢。
【问题讨论】:
-
Java
int[] array = new int[3]对应于 C++int* array = new int[3]()。 C++(或 C)int array[3]没有 Java 等价物。 -
这不是编译语言与解释语言的问题。有些语言有垃圾收集,因为它很方便并且减少了错误的范围;其他人则不这样做,因为更简单的对象管理方案可能更有效。