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
沒有留言:
張貼留言