為什麼有這玩意
主要作用:釋放new出來的空間
class Person{
public:
int * scores;
Person() {
// new出來的這部分空間不會被自動釋放
scores = new int[5];
}
// 下面這個函式,會在物件消亡時自動呼叫,釋放掉new出的空間
~Person() {
delete []scores;
}
};
定義
-
~類名(){}
-
沒有返回值,沒有引數
-
只能有一個
-
自定義解構函式後,就不再生成預設的解構函式。預設的解構函式,不會釋放new出的記憶體空間。
~Person() {
// ...
}
呼叫時機
-
在一個類生成物件時,會呼叫建構函式。在一個物件消亡的時,會呼叫解構函式
#include <iostream>
#include <stdio.h>
using namespace std;
class Demo {
int id; public:
Demo( int i ) {
id = i;
cout << "id=" << id << " Constructed" << endl; }
~Demo() {
cout << "id=" << id << " Destructed" << endl; }
};
Demo d1(1); // 全域性變數,最先建立
void Func(){
static Demo d2(2); // 靜態區域性變數,從函式呼叫時生成,在整個程式結束時,88
Demo d3(3); // 區域性變數
cout << "Func" << endl;
}
// 建立完全域性變數後,進入main函式
int main (){
Demo d4(4); // 區域性變數
d4 = 6; // 型別轉換建構函式,相當於,d4 = Demo(6); Demo(6)是一個臨時變數,建立完賦值給d4,然後就88了
cout << "main" << endl;
{ Demo d5(5); } // 區域性程式碼塊,作用域就在大括號中,所以建立完,程式碼塊執行完,就88了
Func();
cout << "main ends" << endl;
return 0;
}