在堆栈上创建对象时,内存分配在哪里?

时间:2016-02-03 13:07:26

标签: c++ oop object

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

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;
}

有什么区别?

1 个答案:

答案 0 :(得分:0)

第一个,

Ninja n1;

在堆栈上创建。在范围的末尾(在这种情况下是主函数),对象超出范围,并且为此Ninja分配的内存被清除。

第二个,

Ninja * n2 = new Ninja;

在堆上创建。该内存未被清除为作用域的结尾,该对象在函数完成后仍然存在。