類的析構函數
- 1. 作用:
- 1.1 當對象的地址空間釋放的時候,會自動調用析構函數(對象可以主動調用析構函數)
- 1.2 實際應用:往往用來做收尾工作
- 2. 語法規則:
- 示例代碼:析構函數使用
1. 作用:
1.1 當對象的地址空間釋放的時候,會自動調用析構函數(對象可以主動調用析構函數)
- 棧空間 --》函數調用結束,自動釋放,自動析構
- 堆空間 --》函數調用結束不會主動釋放,除非你主動調用delete
1.2 實際應用:往往用來做收尾工作
比如:
- 構造函數–》初始化工作,使用open打開一個文件
- 給指針分配堆空間
- 析構函數–》收尾工作,使用close關閉文件
- 主動釋放堆空間
2. 語法規則:
~類名()
{
代碼
}
特點:
- 析構函數沒有任何重載形式
- 析構函數沒有任何參數
- 如果程序員沒有定義析構函數,系統會自動生成一個析構函數
如果程序員自定義析構函數,那么系統就不會再自動生成默認的析構函數
示例代碼:析構函數使用
#include <iostream>using namespace std;class Animal
{
public:// 定義動物的構造函數Animal(){name = new char[10];cout<<"動物的構造函數,當前對象是:"<<this<<endl;}// 定義動物的析構函數~Animal(){delete []name;cout<<"動物的析構函數,當前對象是:"<<this<<endl;}private:char *name;};int main(int argc, char const *argv[])
{//創建三個對象棧空間--》主函數結束的時候,自動釋放c1 c2 c3的地址空間--》析構就隨之調用Animal a1, a2, a3;// 堆空間Animal *a4 = new Animal;delete a4;return 0;
}/*
執行結果:動物的構造函數,當前對象是:0x7ffcf68aac48動物的構造函數,當前對象是:0x7ffcf68aac50動物的構造函數,當前對象是:0x7ffcf68aac58動物的構造函數,當前對象是:0x563102dd4320動物的析構函數,當前對象是:0x563102dd4320動物的析構函數,當前對象是:0x7ffcf68aac58動物的析構函數,當前對象是:0x7ffcf68aac50動物的析構函數,當前對象是:0x7ffcf68aac48
*/