2016-02-03 60 views
-2

我不明白什么是在内存中发生这种情况:在堆栈上创建对象时分配的内存在哪里?

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

的区别是什么?

+0

是的,第一个在堆栈中,第二个在堆中 – Martin

+0

事先已知的变量和对象被放到堆栈中。在执行期间动态创建的变量和对象放在堆上。 – kometen

+0

所以这实际上是运行时(在执行期间在堆上创建一个对象),并编译时间在行动? –

回答

0

第一个,

Ninja n1; 

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

第二个,

Ninja * n2 = new Ninja; 

在堆上创建。该内存不作为范围的末尾被清除,该对象在功能完成后仍然存在。