創(chuàng)新互聯(lián)是一家成都做網(wǎng)站、網(wǎng)站制作,提供網(wǎng)頁設(shè)計,網(wǎng)站設(shè)計,網(wǎng)站制作,建網(wǎng)站,按需設(shè)計,網(wǎng)站開發(fā)公司,從2013年開始是互聯(lián)行業(yè)建設(shè)者,服務(wù)者。以提升客戶品牌價值為核心業(yè)務(wù),全程參與項目的網(wǎng)站策劃設(shè)計制作,前端開發(fā),后臺程序制作以及后期項目運營并提出專業(yè)建議和思路。
關(guān)于C++單例模式下m_pinstance指向空間銷毀問題,m_pInstance的手動銷毀經(jīng)常是一個頭痛的問題,內(nèi)存和資源泄露也是屢見不鮮,能否有一個方法,讓實例自動釋放。
解決方法就是定義一個內(nèi)部垃圾回收類,并且在Singleton中定義一個此類的靜態(tài)成員。程序結(jié)束時,系統(tǒng)會自動析構(gòu)此靜態(tài)成員,此時,在此類的析構(gòu)函數(shù)中析構(gòu)Singleton實例,就可以實現(xiàn)m_pInstance的自動釋放。
附上測試代碼
1 #include <iostream> 2 using namespace std; 3 4 class Singleton 5 { 6 public: 7 static Singleton *GetInstance() 8 { 9 if (m_Instance == NULL)10 {11 m_Instance = new Singleton();12 cout<<"get Singleton instance success"<<endl;13 }14 return m_Instance;15 }16 17 private:18 Singleton(){cout<<"Singleton construction"<<endl;}19 static Singleton *m_Instance;20 21 // This is important22 class GC // 垃圾回收類23 {24 public:25 GC()26 {27 cout<<"GC construction"<<endl;28 }29 ~GC()30 {31 cout<<"GC destruction"<<endl;32 // We can destory all the resouce here, eg:db connector, file handle and so on33 if (m_Instance != NULL)34 {35 delete m_Instance;36 m_Instance = NULL;37 cout<<"Singleton destruction"<<endl;38 system("pause");//不暫停程序會自動退出,看不清輸出信息39 }40 }41 };42 static GC gc; //垃圾回收類的靜態(tài)成員43 44 };45 46 Singleton *Singleton::m_Instance = NULL;47 Singleton::GC Singleton::gc; //類的靜態(tài)成員需要類外部初始化,這一點很重要,否則程序運行連GC的構(gòu)造都不會進入,何談自動析構(gòu)48 int main(int argc, char *argv[])49 {50 Singleton *singletonObj = Singleton::GetInstance();51 return 0;52 }
運行結(jié)果:
新聞標題:c++設(shè)計模式之單例模式下的實例自動銷毀(垃圾自動回收器)
本文鏈接:http://vcdvsql.cn/article42/pejhhc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供云服務(wù)器、網(wǎng)站導(dǎo)航、網(wǎng)站建設(shè)、網(wǎng)站設(shè)計、建站公司、軟件開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)