【问题标题】:Where is memory allocated when creating object on stack? [duplicate]在堆栈上创建对象时分配的内存在哪里? [复制]
【发布时间】:2016-02-03 13:07:26
【问题描述】:

我不明白在这种情况下内存中发生了什么:

int main(int argc, char** argv) {
    Ninja n; //create a object on the stack?
    Ninja * n = new Ninja;  //create a pointer the the object on the heap?

    return 0;
}

有什么区别?

【问题讨论】:

  • 是的,堆栈中的第一个,堆中的第二个
  • 将事先已知的变量和对象放入栈中。在执行过程中动态创建的变量和对象放在堆上。
  • 所以这实际上是运行时(在执行期间在堆上创建一个对象)和编译时在行动?

标签: c++ oop object


【解决方案1】:

第一个,

Ninja n1;

在堆栈上创建。然后在作用域结束时(本例中为 main 函数),对象超出作用域并清除为此 Ninja 分配的内存。

第二个,

Ninja * n2 = new Ninja;

在堆上创建。这块内存没有被清除,因为作用域结束了,函数结束后对象仍然存在。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-30
    • 1970-01-01
    • 2017-06-15
    • 2013-10-26
    • 2013-07-14
    • 2014-11-12
    • 1970-01-01
    • 2011-12-10
    相关资源
    最近更新 更多