4

请向我解释一下“x”在这段代码中是堆栈动态变量还是堆动态变量?如果是堆动态,那么为什么它不是堆栈动态变量?谢谢

function foo(){ MyClass x = new MyClass();}
4

3 回答 3

7

当您调用函数时,堆栈动态变量就会存在。它们存在于 C++ 运行时堆栈中,并且是临时的。它们要么在参数列表中,要么在函数内部声明(静态变量除外,它们不在堆栈上实例化)。这些变量在超出范围时会消失,并且运行时会回收其内容的内存。

堆动态实例存在于运行时预留的另一个称为“堆”的内存区域中。这些实例通过。“new”操作符,并且必须由“delete”操作符显式释放。

我希望这是有帮助的

于 2015-12-20T21:43:32.607 回答
3

我不确定这是什么语言,我会说它只是伪代码,但大多数常见的 OO 语言中的概念应该是相同的。

让我们分解一下:

function foo() {
    MyClass x = null;
    x = new MyClass();
}

第一行将MyClass x = null在本地堆栈上分配一些空间。它的空间并不大,仅足以存储参考。

第二行将x = new MyClass()做一些事情:

  1. 在堆上为 MyClass 的新实例分配空间
  2. 调用正确的构造函数MyClass
  3. 将引用更改x为指向这个新实例。

所以简单的答案是:两者兼而有之。

于 2013-01-06T18:38:58.950 回答
1

这个特定的一个是:动态堆(我假设你在这里用 JAVA 编程)。至于为什么它不在堆栈上?

  • 这分配内存
  • 它不是一个自动变量

有关一般说明,请参阅本文:http: //www.maxi-pedia.com/what+is+heap+and+stack

于 2013-01-06T18:29:32.987 回答