2016-02-03 87 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; 

在堆上創建。該內存不作爲範圍的末尾被清除,該對象在功能完成後仍然存在。