溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

c++設計模式之單例模式下的實例自動銷毀(垃圾自動回收器)

發(fā)布時間:2020-04-27 02:45:18 來源:網(wǎng)絡 閱讀:417 作者:26度出太陽 欄目:網(wǎng)絡安全

    

關(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的自動釋放。

附上測試代碼

c++設計模式之單例模式下的實例自動銷毀(垃圾自動回收器)

 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 }

c++設計模式之單例模式下的實例自動銷毀(垃圾自動回收器)


運行結(jié)果:

c++設計模式之單例模式下的實例自動銷毀(垃圾自動回收器)

 


向AI問一下細節(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)容。

AI