1.c++中
1. 聲明只是表示一個對象的引用,比如我們的語句:
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,不佔用任何硬件資源。