1
class A {
public:
int i;
};
int main() {
A *obj = new A();
return 0;
}
在下面的代碼,當被創建在堆中創建用於A中的對象的屬性,但如果是我的在OBJ產生的存儲器?? 它是在堆或棧上創建的還是存在不同的行爲?存儲器分配在C++
class A {
public:
int i;
};
int main() {
A *obj = new A();
return 0;
}
在下面的代碼,當被創建在堆中創建用於A中的對象的屬性,但如果是我的在OBJ產生的存儲器?? 它是在堆或棧上創建的還是存在不同的行爲?存儲器分配在C++
作爲-是,你的代碼將無法編譯 -
new
返回一個指針,而你試圖賦值給一個對象,而不是一個指針
假設(也許更習慣於到Java?)你解決這個問題:
A *obj = new A();
是obj
點是在堆上分配整個對象。這包括i
的存儲。 obj
本身是一個指針,它被分配爲auto
存儲(即,通常在堆棧上)。
順便說一句,無論如何你都想要這樣做是相當不尋常的。大多數情況下,您只需定義一個對象(例如A obj;
),並且如果涉及任何堆分配,對象將對其進行管理(包括在對象超出範圍時清理存儲)。
該語法在C++中無效。它甚至不會編譯。 –
我想你的意思是'A * obj = new A();'。 – 0x499602D2
指出修正 – user1198065