A.對于局部對象--當程序執(zhí)行流到達對象的定義語句時進行構(gòu)造
程序示例
#include
using namespace std;
class Test
{
private:
int mi;
public:
Test(int i)
{
mi=i;
cout<<"Test(int i)="<
運行結(jié)果如圖所示
由運行結(jié)果可以看出,程序是按照程序流來實現(xiàn)的Test a=i首先被構(gòu)造,輸出Test(int i)=0,Test a1=++i輸出Test(int i)=1,Test(int i)=2,Test(int i)=3;Test a2=a輸出Test(const Test& obj)=0;
B.對于堆對象
1.當程序執(zhí)行流到達new語句時創(chuàng)建對象
2.使用new創(chuàng)建對象將自動觸發(fā)構(gòu)造函數(shù)的調(diào)用
代碼示例
#include
using namespace std;
class Test
{
private:
int mi;
public:
Test(int i)
{
mi=i;
cout<<"Test(int i)="<
運行結(jié)果如圖所示
C.對于全局對象
1.對象的構(gòu)造順序是不確定的
2.不同的編碼器使用不同的規(guī)則確定構(gòu)造順序
1.一般而言,需要要銷毀的對象都應(yīng)該做清理
2.解決方案
a.為每個類提供一個public的free函數(shù)
b.對象不在需要時立即調(diào)用free函數(shù)進行清理
存在的問題
1.free函數(shù)只是一個普通的函數(shù),必須顯示的調(diào)用
2.對象銷毀前沒有做清理,很可能造成資源泄漏
析構(gòu)函數(shù)
C++的類中可以定義一個特殊的清理函數(shù)
1.這個特殊的清理函數(shù)叫做析構(gòu)函數(shù)
2.析構(gòu)函數(shù)的功能與構(gòu)造函數(shù)相反
定義:~ClassName()
1.析構(gòu)函數(shù)沒有參數(shù)也沒有返回值類型聲明
2.析構(gòu)函數(shù)在對象銷毀時自動被調(diào)用
代碼示例
#include
using namespace std;
class Test
{
int mi;
public:
Test(int i)
{
mi = i;
cout<<"Test()"<
運行結(jié)果
運行結(jié)果如圖所示,使用~ClassName之后對構(gòu)造函數(shù)進行了析構(gòu),并銷毀
小結(jié)
1.局部對象的構(gòu)造順序依賴于程序的執(zhí)行流
2.堆對象的構(gòu)造順序依賴于new的使用順序
3.全局對象的構(gòu)造順序是不確定的
4.析構(gòu)函數(shù)時對象銷毀時進行清理的特殊函數(shù)
5.析構(gòu)函數(shù)在對象銷毀時自動被調(diào)用
6.析構(gòu)函數(shù)是對象釋放系統(tǒng)資源的保障
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。