C++ 速查手冊

9.15 - 解構函數

解構函數 (destructor) 為程式結束執行銷毀物件之用,通常編譯器會提供預設的解構函數,可是當類別成員有指標的時候,就需要寫自己的解構函數,使其進行有效的記憶體管理。

舉例如下

#include <iostream>
  
class Demo {
public:
    Demo(int pa) {
        std::cout << "constructor" << std::endl;
        a_ptr = new int;
        *a_ptr = pa;
    }
    
    ~Demo() {
        std::cout << "destructor" << std::endl;
        delete a_ptr;
    }
    
    void do_something() {
        std::cout << *a_ptr << std::endl;
    }
    
private:
    int *a_ptr;
};

int main(void) {
    Demo d(2048);
    d.do_something();
    
    return 0;
}

/* 《程式語言教學誌》的範例程式
   https://kaiching.org/
   檔名:u0915.cpp
   功能:示範 C++ 的類別
   作者:張凱慶*/

解構函數在第 11 行,用 ~ 符號表示解構函數,裡頭用 delete 刪除指標成員

~Demo() {
    std::cout << "destructor" << std::endl;
    delete a_ptr;
}

編譯執行,結果如下

$ g++ u0915.cpp
$ ./a.out
constructor
2048
destructor
$

上一頁 9.14 - Copy 建構函數
回 C++ 速查手冊首頁
下一頁 9.16 - 多載運算子
回 C++ 教材
回程式語言教材首頁