網頁

2022/8/16

C++ 解構式/解構子 destructor

C++的解構式(destructor)用來結束一個類別物件的生命週期,即建構式(constructor)的相反,。


解構式為同類別名稱的無參數無回傳的成員函式前加上波浪號~,用途為清除物件佔用的資源,例如new配置的動態記憶體成員。

由於解構式只能是無參數函式,所以一個類別只會有一個解構式。若未定義解構式則編譯器會自動產生一個無實作的解構式。在物件生命週期結束時,即離開執行程式範圍時解構式會自動被呼叫。

例如下面類別Car的成員函式~Car()為解構式,其中以delete釋放建構式Car()中以new配置的動態記憶體空間成員rank

#include <iostream>
#include <string>
using namespace std;

class Car {
    private:
        // 屬性 attributes
        string model;
        int speed;
        int* rank;

    public:
        // 建構式 constructor
        Car() { rank = new int; }

        // 解構式 destructor
        ~Car() {
            cout << "destruct " << model << endl;
            delete rank;
        }

        // 方法 methods
        string GetModel() { return model; }
        void SetModel(string model) { this->model = model; }
        int GetSpeed() { return speed; }
        void SetSpeed(int speed) { this->speed = speed; }
        int GetRank() { return *rank; }
        void SetRank(int rank) { *(this->rank) = rank; }
};

int main() {
    Car car1;
    car1.SetModel("car1");
    car1.SetRank(1);

    Car car2;
    car2.SetModel("car2");
    car2.SetRank(2);

    cout << car1.GetRank() << endl; // 1
    cout << car2.GetRank() << endl; // 2

    return 0;
}

執行印出以下,在離開main()函式時物件的解構式會自動被調用。

1
2
destruct car2
destruct car1


沒有留言:

張貼留言