建構函式和析構函式例項解析

2021-10-09 21:29:36 字數 759 閱讀 8435

在c++中,建立物件時呼叫建構函式進行初始化,物件結束生命週期時呼叫析構函式進行「善後」工作。

三、建構函式的分類

程式中難以察覺的錯誤多是由於變數沒有被正確初始化或清除造成的,而初始化和清除工作很容易被人遺忘。bjarne stroustrup在設計c++語言時充分考慮到了這個問題並很好地加以解決。

建立乙個物件和裝修二手房子一樣:你得到了一塊記憶體,前任留下的什麼東西的都還留在裡面,你得先清理(把內容置零)、重新裝修(設定一些基礎資訊)之後才能入住。這個固定的、執行裝修事宜的步驟就是建構函式。而通常我們搬離房子,為使下一任房主拎包入住,需要將整個房子重新打掃置零,這種操作我們稱之為析構函式。

把物件的初始化工作放在建構函式中,把清除工作放在析構函式中。當建立物件時,建構函式被自動執行;當物件消亡時,析構函式自動執行。

在乙個類中可以有多個建構函式,它們構成了函式的過載。

class solution

//進行過載

solution(int a1,inta2,int a3): a1_(a1),a2_(a2),a3(a3){}

};

只要在析構函式中呼叫 delete 語句,就能確保物件執行中用 new 運算子分配的空間在物件消亡時被釋放。

class solution

~solution(){}

};

呼叫析構函式的時機

析構函式呼叫順序

當物件超出範圍或被刪除時,其完整析構中的事件序列如下所示:

建構函式和析構函式解析

1 建構函式 1.1 建構函式的執行順序 子類會自動呼叫父類的預設建構函式 如果父類中沒有預設建構函式,子類又沒有顯示宣告呼叫 如son super 1 會提示錯誤。建構函式順序如下 1 如果有基類則首先構造基類 1 呼叫順序僅僅和繼承宣告時一致,2 不管是否在子類的建構函式實現時給出顯示呼叫,例如...

建構函式和析構函式

建構函式沒有返回值,不能被顯示的呼叫。它是在定義物件時由系統自動執行的,而且只執行一次。如果沒有定義建構函式,系統會自動生成乙個建構函式,只是這個建構函式的函式體是空,沒有引數,也不執行任何初始化的操作。帶引數的建構函式 有一種簡練,方便的寫法 建構函式的引數初始化表 box int h,int w...

析構函式和建構函式

每個物件生成的時候都要完成物件的初始化,如設定屬性的初始值。c 中規定每個類都有乙個初始值,如果沒有,系統會產生乙個預設的建構函式。這個建構函式沒有任何引數,不做任何額外的工作。但往往我們會自己寫乙個建構函式,用來進行特殊的初始化工作。這樣的話,編譯器就不會再為其生成預設的建構函式。class 類名...