C++ 速查手冊 V1.00 - 單元 9.15 - 解構函數




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


舉例如下


001 #include <iostream>
002
003 class Demo {
004 public:
005    Demo(int pa) {
006       std::cout << "constructor" << std::endl;
007       a_ptr = new int;
008       *a_ptr = pa;
009    }
010
011    ~Demo() {
012       std::cout << "destructor" << std::endl;
013       delete a_ptr;
014    }
015
016    void do_something() {
017       std::cout << *a_ptr << std::endl;
018    }
019
020 private:
021    int *a_ptr;
022 };
023
024 int main(void) {
025    Demo d(2048);
026    d.do_something();
027
028    return 0;
029 }
030  
031 /* Kaiching Chang 
032    u0915.cpp
033    2014-02 */

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


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

編譯執行,結果如下


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

continue ...

沒有留言: