下面的代碼創建在棧上的對象:堆棧/堆上的對象創建?
Object o;
當創建在堆上對象,就可以使用:
Object* o;
o = new Object();
而非:
Object* o = new Object();
當我們分裂在兩行創建堆對象並在第二行調用構造函數(o = new object()
),這是否意味着在第一行(Object* o
)指針是在堆棧上創建的?因此Object o
將對象放在堆棧上,而Object* o
將指針放在堆棧上的未來對象上?
我的第二個問題涉及如果兩行代碼被稱爲類之外。我最近閱讀(Global memory management in C in stack or heap?)全局變量不包含在堆棧/堆中,但實際上是另一部分內存?如果是這樣的話,Object* o
會創建一個指針,該指針位於內存的另一部分,並指向堆對象?
這兩個將*大概*優化,以同樣的事情,我想。 – Ryan 2012-04-14 20:33:57
_pointer_始終在堆棧上創建。 – leftaroundabout 2012-04-14 20:36:41
我會第二@leftaroundabout,並走得更遠:在一個塊中聲明的所有變量都在棧上創建的;第一個示例的整個對象以及第二個對象的指針。 – 2012-04-14 20:50:39