返回在各种语言的函数中创建的数组和对象

时间:2015-03-14 11:49:47

标签: java python c++ c arrays

我对在函数调用中本地创建的返回数组和对象感到困惑。所以我相信 -

  1. C - 没有对象,只能在堆栈上创建数组和结构,因此在函数返回时将被删除。因此,将它们作为返回值发送到调用模块是不明智的。

  2. C ++ - Objects &结构驻留在堆中,因此可以返回对象但没有其他内容,即返回时仍会销毁数组

  3. Java - 我可以返回数组和对象,我猜数组在这里移动到了堆?

  4. Python - 与Java相同,本地创建的对象和数组可以作为参考返回给调用模块。

  5. 如果我错了,请纠正我。现在为什么java / python会将数组放入堆中?正在解释语言的原因是什么?因此,每种编译语言都不会让我将本地创建的数组返回给调用模块。

    提前致谢。

2 个答案:

答案 0 :(得分:4)

  1. C具有对象,例如结构的实例。您可以安全地从函数返回这些函数,前提是它们没有引用函数本地变量的数据成员。您无法返回数组,因为它们不可复制。但是你可以安全地返回带有数组数据成员的结构,在这种情况下会复制数组。

  2. 与C相同。对象是结构体或内置插件的实例。 structsclasses相同。它们是否在“堆”上取决于你如何实例化它们(这在C中是完全相同的)。唯一的区别是C ++有return value optimization (RVO)允许在许多情况下省略副本。

  3. 我不确定返回数组的确切语义,但Java具有引用语义,因此通常对象的生命周期超出其范围。

  4. 与Java类似。生命周期不限于范围,因此从函数中返回任何类型的对象都是完美的。

答案 1 :(得分:1)

延伸一点答案:

Python通过引用计数管理生命周期。当一个对象没有引用时,它将被破坏或最终确定并释放。 在Java中我认为发生完全相同的