您好,登錄后才能下訂單哦!
關(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é)果:
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。