返回在各种语言的函数中创建的数组和对象
returning arrays and objects created in functions in various languages
我对返回在函数调用中本地创建的数组和对象有点困惑。所以我相信——
-
C - 没有对象,只能在堆栈上创建数组和结构,因此在函数返回时将被删除。因此,将它们作为返回值发送到调用模块是不明智的。
-
C++ - 对象和结构驻留在堆中,因此可以返回对象,但不能返回其他内容,即数组在返回时仍会被销毁
-
Java - 我可以返回数组和对象,我想数组移动到这里
堆? Python - 与Java相同,本地创建的对象和数组可以返回到调用模块作为参考。
如果我在某处错了,请纠正我。现在为什么java/python会把数组放在堆中?被解释语言是原因吗?因此,每种编译语言都不会让我将本地创建的数组返回到调用模块。
提前谢谢。
-
C 具有对象,例如结构体的实例。您可以从函数安全地返回这些变量,前提是它们没有引用函数本地变量的数据成员。您无法返回数组,因为这些数组不可复制。但是,您可以安全地返回包含数组数据成员的结构,在这种情况下,将复制数组。
-
与 C 相同,对象是结构或内置的实例。
structs
与classes
相同。它们是否在"堆"上取决于您如何实例化它们(这在 C 中完全相同)。唯一的区别是C++具有返回值优化 (RVO),它允许在许多情况下省略副本。 -
我不确定返回数组的确切语义,但 Java 具有引用语义,因此通常对象的生命周期会超出其范围。
-
类似于Java。生存期不受作用域的限制,因此从函数返回任何类型的对象都是完全可以的。
来扩展一下答案:
Python 通过引用计数来管理生命周期。当对象没有引用时,它将被销毁或最终确定并释放。在Java中,我认为这种情况完全相同
相关文章:
- 在将 new 与指针一起使用时,创建数组的指定长度
- 在函数中使用 const int size 参数创建数组会在 Visual Studio 中抛出错误 C++:表达式的计
- 合并排序不排序自创建数组类 c++
- 基于参数创建数组
- 使用new创建数组而不声明大小
- c++用输入数据创建数组
- 从类 c++ 动态创建数组
- 如何使用 void 函数从类创建数组
- 未知大小的数组作为类成员,用于在运行时(对象创建时间)创建数组的对象
- 如何在不知道Arduino中知道其大小的情况下创建数组和存储值
- 使用动态分配创建数组并将元素插入其中
- 是否可以使用C 函数中的const int参数创建数组
- 如何在C++函数中创建数组
- 使用 ::std::vector 创建数组
- 在编译时以增量方式创建数组
- Numpy C API - 使用 PyArray_Descr 创建数组会导致段错误
- 为什么当我尝试在类中创建数组时"invalid use of non-static data member"我会收到错误?
- 取消引用指针以创建数组的副本
- C++ 在堆上创建数组而不对其进行初始化
- 数组的维度是在创建数组的那一刻确定的,以后不能更改的,这是真的吗?