C new和初始化

2021-08-05 18:49:46 字數 983 閱讀 4369

本文章僅為個人學習,如有錯誤,請指正。

雖然知道使用new可以建立物件,但一直不是很理解初始化和new等知識的具體。

通過8個問題和需求,了解相關知識。

了解問題和需求

1.new 的三個步驟

2.初始化是什麼意思。

3.變數宣告後和變數賦值為null或變數呼叫了new的區別。

4.欄位不是變數。

1.new的三個步驟:

1.1在棧或者堆中開闢空間,空間的大小由類決定,進行記憶體空間指向。

1.2在開闢的控制項中進行建立物件

個人理解建立物件就是,在記憶體空間中存放字段,但是字段依然沒有進行資料存放的記憶體空間指向,雖然這個物件在記憶體中佔了空間,但是沒有進行具體分配。

1.3進行初始化。

2.初始化:

初始化就是呼叫建構函式,對所有的字段進行賦值,賦值為預設值。

引用型別為null。

值型別int為0,double為0.0。

個人理解:讓字段具有預設值後,進行了空間的分配,記憶體中儲存的就是對應的實際值,null表示我沒有進行具體的使用,但是我有儲存資料的空間。

3.變數宣告後和變數賦值為null或變數呼叫了new的區別。

主要區分函式中的變數和物件中的字段的區別。

3.1變數宣告後,沒有進行賦值的含義:

宣告未賦值,會無法生成,提示『使用了未賦值的變數』。

通過reflecter可以看到,宣告變數未賦值,實際是不存在的,那麼就是說沒有進行分配記憶體。

3.2變數賦值為null

表明變數具有記憶體空間,但是記憶體中什麼也不存在。

3.3變數呼叫new

變數中存在了物件也就是存在了字段,只是字段進行了賦值,賦值為預設值。

4.欄位不是變數。

通過3和4感受一下變數和字段的區別。

變數存在函式中,欄位是類的成員。

類中函式呼叫字段或者對應的屬性,只會出現為null的情況。

類中函式宣告變數,會出現無法編譯的情況。

C new是否執行初始化

本文 c 在new時的初始化的規律可能為 對於有建構函式的類,不論有沒有括號,都用建構函式進行初始化 如果沒有建構函式,則不加括號的new只分配記憶體空間,不進行記憶體的初始化,而加了括號的new會在分配記憶體的同時初始化為0。以下 include using namespace std int m...

直接初始化和複製初始化

關於這個問題,國內外都有許多爭論,但我至今未找到滿意的答案,至於為為什麼,這就是今天要說明的。可能大家都有看過c primer,我看的是第四版,中文版,英文水平不怎麼樣。其中第13章,描述說,複製建構函式可用於 1.根據另乙個同型別的物件顯式或隱式初始化乙個物件 2.複製乙個物件,將它作為引數傳遞給...

靜態初始化和例項初始化

父類單獨的效果 當父類單獨執行時,靜態初始化塊優先執行,然後是例項初始化塊,最後才是構造器 子類單獨效果 首先執行父類的靜態初始化塊和子類的初始化塊 優先執行靜態 然後執行父類的例項初始化塊和構造器,最後執行子類的例項初始化塊和構造器 父類子類效果1 父在前子在後 先將父類的物件例項出來後,進行子類...