Qt物件導向:建構子與解構子
在Qt物件導向:什麼是類別主要簡單描述類別的組成。在C++11以前,類別主要會用到四個成員函數:
當資料成員含有指標時對記憶體進行操作,建構子通常對指標資料成員配置記憶體位置,而解構子主要釋放此指標所佔用的記憶體。
接下來,我將解釋此四個成員函數所代表的意義:
若在標頭檔定義建構子時,加入修飾語 explicit,則限制此類別的所呼叫的建構子。
- 建構子 (Constructor)
- 三法則 (Rule of Three)
- 解構子 (Destructors)
- 複製建構子 (Copy Constructor)
- 設定運算子 (Copy assignment operator )
當資料成員含有指標時對記憶體進行操作,建構子通常對指標資料成員配置記憶體位置,而解構子主要釋放此指標所佔用的記憶體。
接下來,我將解釋此四個成員函數所代表的意義:
建構子
建構子必須與類別名稱相同,而且當你初始化類別產生物件時,建構子將自動地被呼叫.因此,建構子初始化類別的成員或對指標成員動態配置記憶體.此成員函數有以下特性:- 沒有回傳值 (Return type)
- 允許重載 (Overloading) -可定義多個建構子
- 默認建構子 (default) 是沒有輸入引數 (arguments) 。因此,當你在標頭檔沒有定義建構子成員函數時,編譯器將自動產生。
classname::classname()
{
}
解構子
解構子主要由類別名稱和~所構成,然而此成員函數主要在消滅物件前釋放之前所配置的記憶體.因此,當在建構子為指標動態配置記憶體時(i.e. new),別忘記要在解構子釋放此記憶體(i.e. delete)。
classname::~classname()
{
}
- 沒有回傳值 (Return type)
- 不允許重載 (Overloading) - 唯一
- 預設不是虛函數
注意事項
- 解構子絕對不能拋出異常。若解構子調用拋出異常函數,請捕捉此異常做相應的處理。
線上測驗:http://quiz.geeksforgeeks.org/c-plus-plus/destructors/
物件什麼時候會被消滅?
- 在程式結束之前,所有物件所佔用的靜態記憶體位址(i.e.全域變數)將會被釋放.
- 當使用new初始化類別產生物件時,請記得使用delete歸還所佔用的記憶體.
- 當區域物件變數超出作用域範圍,例如在成員函數使用區域物件變數時,當出現return指令時,程式將自動消滅此物件.
Reference:
Effective C++
留言
張貼留言