new創建對象和直接定義的區別

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,不佔用任何硬件資源。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章