2012-10-08 47 views
1
class A { 
    public: 
    int i; 
}; 

int main() { 
    A *obj = new A(); 
    return 0; 
} 

在下面的代碼,當被創建在堆中創建用於A中的對象的屬性,但如果是我的在OBJ產生的存儲器?? 它是在堆或棧上創建的還是存在不同的行爲?存儲器分配在C++

+1

該語法在C++中無效。它甚至不會編譯。 –

+1

我想你的意思是'A * obj = new A();'。 – 0x499602D2

+0

指出修正 – user1198065

回答

5

作爲-是,你的代碼將無法編譯 - new返回一個指針,而你試圖賦值給一個對象,而不是一個指針

假設(也許更習慣於到Java?)你解決這個問題:

A *obj = new A(); 

obj點是在堆上分配整個對象。這包括i的存儲。 obj本身是一個指針,它被分配爲auto存儲(即,通常在堆棧上)。

順便說一句,無論如何你都想要這樣做是相當不尋常的。大多數情況下,您只需定義一個對象(例如A obj;),並且如果涉及任何堆分配,對象將對其進行管理(包括在對象超出範圍時清理存儲)。