- 生活中對象都是被初始化后才上市的
- 生活中的對象被銷毀前會做一些工作
問題1 : C++中如何清理需要銷毀的對象?
- 一般而言,需要銷毀的對象都應(yīng)該做清理
- 解決方案
- 為每個類都提供一個public的free函數(shù)
- 對象不再需要時立即調(diào)用free函數(shù)進(jìn)行清理
class Test
{
int* p;
public:
Test() { p = new int ;};
void free() {delete p ;};
};
-
存在的問題
- free只是一個普通的函數(shù), 必須顯示的調(diào)用
- 對象銷毀前沒有做清理, 很可能造成資源泄露
問題2: C++編譯器是否能夠自動調(diào)用某個特殊的函數(shù)進(jìn)行對象的清理?
析構(gòu)函數(shù)
-
C++的類中可以定義一個特殊的清理函數(shù)
- 這個特殊的清理函數(shù)叫做析構(gòu)函數(shù)
- 析構(gòu)函數(shù)的功能與構(gòu)造函數(shù)相反
-
定義 : ~ClassName()
- 析構(gòu)函數(shù)沒有參數(shù)也沒有返回值類型聲明
- 析構(gòu)函數(shù)在對象銷毀時自動調(diào)用
-
析構(gòu)函數(shù)的定義準(zhǔn)則
- 當(dāng)類中自定義了構(gòu)造函數(shù),并且構(gòu)造函數(shù)中使用了系統(tǒng)資源(如:內(nèi)存申請,文件打開,等)則需要自動以析構(gòu)函數(shù).
小結(jié)
- 析構(gòu)函數(shù)是對象銷毀時進(jìn)行清理的特殊函數(shù)
- 析構(gòu)函數(shù)在對象銷毀時自動被調(diào)用
- 析構(gòu)函數(shù)是對象釋放系統(tǒng)資源的保障