WHAT'S NEW?
Loading...

Qt物件導向:建構子與解構子

Qt物件導向:什麼是類別主要簡單描述類別的組成。在C++11以前,類別主要會用到四個成員函數:
  • 建構子 (Constructor)
  • 三法則 (Rule of Three)
    • 解構子 (Destructors)
    • 複製建構子 (Copy Constructor)
    • 設定運算子 (Copy assignment operator )

當資料成員含有指標時對記憶體進行操作,建構子通常對指標資料成員配置記憶體位置,而解構子主要釋放此指標所佔用的記憶體

接下來,我將解釋此四個成員函數所代表的意義:

建構子

建構子必須與類別名稱相同,而且當你初始化類別產生物件時,建構子將自動地被呼叫.因此,建構子初始化類別的成員或對指標成員動態配置記憶體.此成員函數有以下特性:
  • 沒有回傳值 (Return type)
  • 允許重載 (Overloading) -可定義多個建構子
    • 默認建構子 (default) 是沒有輸入引數 (arguments) 。因此,當你在標頭檔沒有定義建構子成員函數時,編譯器將自動產生。
    • classname::classname()
      {
      }
      

  • 若在標頭檔定義建構子時,加入修飾語 explicit,則限制此類別的所呼叫的建構子。


解構子

解構子主要由類別名稱和~所構成,然而此成員函數主要在消滅物件前釋放之前所配置的記憶體.因此,當在建構子為指標動態配置記憶體時(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:

      1. Effective C++

      0 comments:

      張貼留言