析構(gòu)函數(shù)
/*
析構(gòu)函數(shù)(destructor) :
與構(gòu)造函數(shù)相反,當(dāng)對象結(jié)束其生命周期,
如對象所在的函數(shù)已調(diào)用完畢時(shí),系統(tǒng)自動(dòng)執(zhí)行析構(gòu)函數(shù)。
析構(gòu)函數(shù)往往用來做“清理善后” 的工作
(例如在建立對象時(shí)用new開辟了一片內(nèi)存空間,
delete會(huì)自動(dòng)調(diào)用析構(gòu)函數(shù)后釋放內(nèi)存)。
1.不能有參數(shù) , 所以不可重載
2.無返回值
3.當(dāng)類中含有指針時(shí)?
delete 該類的一個(gè) 對象,不會(huì)撤銷里面指針?biāo)傅目臻g,但析構(gòu)函數(shù)可以
所以 析構(gòu)函數(shù)三法則:
有復(fù)制構(gòu)造函數(shù)和賦值運(yùn)算符重載(例如將=的功能變成深復(fù)制),需要析構(gòu)函數(shù)?
*/
/*
c++中delete和析構(gòu)函數(shù)之間的區(qū)別:
https://www.cnblogs.com/qbdj/p/10882213.html
*/



#include<iostream>
using namespace std;
class CDemo {
public:
? ? ~CDemo() {? //析構(gòu)函數(shù)
? ? ? ? cout << "Destructor called"<<endl;
? ? }
};
int main() {
? ? CDemo array[2];? //構(gòu)造函數(shù)調(diào)用2次
? ? CDemo* pTest = new CDemo;? //構(gòu)造函數(shù)調(diào)用
? ? delete pTest;? //析構(gòu)函數(shù)調(diào)用
? ? cout << "-----------------------" << endl;
? ? pTest = new CDemo[2];? //構(gòu)造函數(shù)調(diào)用2次
? ? delete[] pTest;? //析構(gòu)函數(shù)調(diào)用2次
? ? cout << "Main ends." << endl;
? ? return 0;
}