请向我解释一下“x”在这段代码中是堆栈动态变量还是堆动态变量?如果是堆动态,那么为什么它不是堆栈动态变量?谢谢
function foo(){ MyClass x = new MyClass();}
请向我解释一下“x”在这段代码中是堆栈动态变量还是堆动态变量?如果是堆动态,那么为什么它不是堆栈动态变量?谢谢
function foo(){ MyClass x = new MyClass();}
当您调用函数时,堆栈动态变量就会存在。它们存在于 C++ 运行时堆栈中,并且是临时的。它们要么在参数列表中,要么在函数内部声明(静态变量除外,它们不在堆栈上实例化)。这些变量在超出范围时会消失,并且运行时会回收其内容的内存。
堆动态实例存在于运行时预留的另一个称为“堆”的内存区域中。这些实例通过。“new”操作符,并且必须由“delete”操作符显式释放。
我希望这是有帮助的
我不确定这是什么语言,我会说它只是伪代码,但大多数常见的 OO 语言中的概念应该是相同的。
让我们分解一下:
function foo() {
MyClass x = null;
x = new MyClass();
}
第一行将MyClass x = null
在本地堆栈上分配一些空间。它的空间并不大,仅足以存储参考。
第二行将x = new MyClass()
做一些事情:
MyClass
x
为指向这个新实例。所以简单的答案是:两者兼而有之。
这个特定的一个是:动态堆(我假设你在这里用 JAVA 编程)。至于为什么它不在堆栈上?
有关一般说明,请参阅本文:http: //www.maxi-pedia.com/what+is+heap+and+stack