1. 程式人生 > >new建立物件和直接定義的區別

new建立物件和直接定義的區別

MyClasee myclass;

這裡是一個空引用,而通過new關鍵字可以例項化一個MyClasee的例項

所以語句:

myclass = new MyClass();

2.棧,放的是區域性變數,他的生存期就是他所處的語句塊(也就是離他最近的一對{}),離開了他的生存期他就失效了,一般宣告形式就是在棧中定義的。堆上的空間需要你用new申請,用delete或者delete[]歸還,在程序的範圍內,該記憶體的生存期就完全由你操作了;

3.C++裡的new負責的是記憶體的分配,並不負責把例項初始化成有效狀態。而C#則兩步都要做。所以我們經 常在C++裡new一個物件或者用指標操作物件的時候,要先清零或者設定null,但是在C#裡一般不用這麼做,因為它已經做了這一步。

-----------------------------------------------------------------------------

(1)CFont myFont;//定義了myFont變數,然後就可以直接用myFont變量了
(2)CFont myFont = new CFont();//myFont也可以直接使用了
這兩個有什麼區別嗎?

空間分配的位置不一樣

第一個系統管理記憶體
第二個需要自己管理釋放

直接建立是編譯器就留出了空間,在程式裝入的資料段裡

用new建立的空間是執行期在堆空間分配,用完後要自己記得歸還(delete)

2.java中

使用new來建立,那麼程式就會在heap上分配空間來儲存它,但是當你引用的時候則不然,你可以為它分配空間也可不分配,看你需要了!分配了就是個物件,如果不分配就是null,不佔用任何硬體資源。