青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

C++之竹

無論是太陽下,還是風雨中,都要成長!

常用鏈接

統計

最新評論

Singleton模式——C++應用(四)

 在前面的例子中,我們看到:采用 new 來為單件對象分配空間,如果采用手動調用 delete 或封裝了 delete 的 Release 操作,一旦遇到全局對象的析構有調用單件對象,就會使得無法在代碼中找到適合釋放單件對象的時機。那么,是否可以讓系統來自動選擇時機,調用釋放呢?如果可以,又該怎么在代碼中構建單件對象的自動釋放機制呢? 對這兩個問題,在進行了一番思考和嘗試后,終于找到了答案 —— 內建只有一個析構方法的結構體,定義一個靜態的該結構體的變量,并在結構體的析構中釋放單件對象。下文將就此給出 Demo,還望有高手能給出更好的方案。(從前面內容,我們已經知道,單件對象的指針通過靜態類成員變量進行存儲,并通過 new 分配的方式,存在在著線程安全的問題。同理,下面Demo的單件類A在多線程環境使用時,自然也存在線程安全的問題。)

 Demo代碼如下:

  1// Singleton demo_2: Singleton instance is created by new.
  2// [A does not support multithreading, but C support.] + [delete instance automatically]
  3
  4#include <Windows.h>
  5#include <iostream>
  6
  7class A 
  8{
  9private:
 10    static struct A_RELEASER {
 11        ~A_RELEASER() {
 12            std::cout << "Release singleton of A. {{" << std::endl;
 13            if (ms_pInstance != NULL)
 14            {
 15                delete ms_pInstance;
 16                ms_pInstance = NULL;
 17            }

 18            std::cout << "}} Release singleton of A." << std::endl;
 19        }

 20    }
 ms_autoReleaser;
 21
 22    static A* ms_pInstance;
 23
 24public:
 25    static A& GetInstance();
 26
 27private:
 28    A() : m_nStat1(-1), m_nStat2(-1{
 29        m_nStat1 = 0;
 30        std::cout << "Construct A" << std::endl;
 31        m_nStat2 = 0;
 32    }

 33    A(const A&);
 34
 35public:
 36    ~A() {
 37        m_nStat1 = 0;
 38        std::cout << "Destruct A" << std::endl;
 39        m_nStat2 = 0;
 40    }

 41
 42    void Do() {
 43        ++m_nStat1;
 44        ++m_nStat2;
 45        std::cout << "Called Do() by object of A. [" 
 46            << m_nStat1 << "" 
 47            << m_nStat2 << "]" 
 48            << std::endl;
 49    }

 50
 51private:
 52    int m_nStat1;
 53    int m_nStat2;
 54}
;
 55
 56class C
 57{
 58private:
 59    static struct C_RELEASER {
 60        ~C_RELEASER() {
 61            std::cout << "Release singleton of C. {{" << std::endl;
 62            delete &GetInstance();
 63            std::cout << "}} Release singleton of C." << std::endl;
 64        }

 65    }
;
 66
 67public:
 68    static C& GetInstance();
 69
 70private:
 71    C() : m_nStat(-1{
 72        std::cout << "Construct C" << std::endl;
 73        m_nStat = 0;
 74    }

 75    C(const C&);
 76
 77public:
 78    ~C() {
 79        std::cout << "Destruct C" << std::endl;
 80        m_nStat = 0;
 81    }

 82
 83    void Do() {
 84        ++m_nStat;
 85        std::cout << "Called Do() by object of C. [" 
 86            << m_nStat << "]" 
 87            << std::endl;
 88    }

 89
 90private:
 91    int m_nStat;
 92}
;
 93
 94class B
 95{
 96public:
 97    B(int nID) : m_nID(nID) {
 98        std::cout << "Construct B: " << m_nID << std::endl;
 99        A::GetInstance().Do();
100        C::GetInstance().Do();
101    }

102    ~B() {
103        std::cout << "Destruct B: " << m_nID << std::endl;
104        A::GetInstance().Do();
105        C::GetInstance().Do();
106    }

107
108private:
109    int m_nID;
110}
;
111
112static B gs_B0(0);
113B g_B1(1);
114
115A* A::ms_pInstance = NULL;
116A::A_RELEASER A::ms_autoReleaser;
117A& A::GetInstance()
118{
119    if (NULL == ms_pInstance)
120    {
121        ms_pInstance = new A;
122    }

123
124    return *ms_pInstance;
125}

126
127C& C::GetInstance()
128{
129    static C_RELEASER s_autoReleaser;
130    static C* s_pInstance = new C;
131
132    return *s_pInstance;
133}

134
135static B gs_B2(2);
136B g_B3(3);
137
138int main(int argc, char * argv[])
139{
140    std::cout << "Enter main" << std::endl;
141    A::GetInstance().Do();
142    C::GetInstance().Do();
143    
144    system("pause");
145    return 0;
146}

147

運行后的結果:

 

綜合Demo代碼和運行結果,我們可以看到,對于單件類A的對象釋放者采用了類的靜態成員的方式來定義,其結果是,單件類A的對象釋放時機仍然不對。

再看C,代碼中new 所得的對象指針交由一局部靜態變量以保證 new 只會執行一次(從而保證了線程安全), 而單件對象的釋放者就定義在緊挨 new 的前面(事實上,也可以定義在緊挨 new 的后面)。接著是執行結果,完全OK! 哈哈~,值得推薦的第二種C++單件類構建模式終于也出爐了,那就是上例Demo中,單件類C的構建模式。

 

至此,《Singleton模式——C++應用》全部完成,因為還是第一次寫技術博客,寫得不好,還請各位看官見諒!

嗯~,突然發現,我漏寫了對這全部四篇內容的一個總結,……還是算了,就請各位原諒我這次的偷懶咯!~

 

posted on 2012-03-14 01:07 青碧竹 閱讀(354) 評論(0)  編輯 收藏 引用 所屬分類: 設計模式

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美在线视频日韩| 巨乳诱惑日韩免费av| 国产乱码精品一区二区三区不卡| 欧美不卡视频一区发布| 久热精品视频在线| 欧美日本在线| 国产精品视频精品视频| 国产日韩欧美在线| 狠狠色噜噜狠狠狠狠色吗综合| 在线观看日韩www视频免费| 亚洲日本一区二区| 亚洲欧美日韩在线观看a三区| 久久精品国产第一区二区三区最新章节 | 欧美成人午夜影院| 久久久欧美一区二区| 欧美激情亚洲自拍| 国产日韩欧美夫妻视频在线观看| 国产精品一区视频网站| 韩日欧美一区| 亚洲午夜精品| 欧美成人一区二区三区片免费| 亚洲精品久久在线| 欧美在线亚洲在线| 欧美精品国产精品日韩精品| 国产日韩精品在线观看| 99精品视频一区| 久久在线精品| 亚洲图片欧洲图片日韩av| 美腿丝袜亚洲色图| 国产亚洲福利一区| 亚洲影视九九影院在线观看| 欧美国产激情二区三区| 亚洲一区在线播放| 亚洲福利在线看| 西西人体一区二区| 欧美日韩午夜在线| 亚洲国产欧美日韩精品| 久久久久国产一区二区三区四区| 亚洲精品影视| 欧美精品在线看| 亚洲电影免费观看高清完整版在线| 午夜伦理片一区| 一区二区三区www| 欧美极品色图| 日韩视频一区二区在线观看| 欧美丰满少妇xxxbbb| 欧美一级艳片视频免费观看| 国产精品红桃| 亚洲综合精品自拍| 99精品欧美一区二区三区综合在线| 久久理论片午夜琪琪电影网| 国产亚洲精品自拍| 先锋亚洲精品| 午夜综合激情| 国产一区二区中文字幕免费看| 午夜伦理片一区| 亚洲一区二区三区在线| 国产精品日本| 久久成人精品一区二区三区| 亚洲夜晚福利在线观看| 国产精品手机视频| 久久精品日韩欧美| 久久xxxx精品视频| 在线精品视频一区二区| 欧美成人精品高清在线播放| 久久尤物电影视频在线观看| 91久久极品少妇xxxxⅹ软件| 亚洲高清影视| 欧美性开放视频| 欧美伊人久久久久久午夜久久久久| 亚洲女同精品视频| 韩国精品久久久999| 欧美激情精品久久久久久蜜臀| 女主播福利一区| 一本色道久久加勒比88综合| 99国产一区| 国产日韩在线一区二区三区| 老色批av在线精品| 欧美a级一区| 亚洲欧美成人一区二区在线电影 | 国产一区二区黄| 欧美a级一区二区| 欧美日韩国产小视频| 亚洲永久字幕| 久久久噜噜噜久久| 一本色道久久综合狠狠躁篇的优点| 亚洲视频免费在线| 激情欧美日韩一区| 亚洲美女区一区| 狠狠色狠狠色综合日日91app| 欧美激情 亚洲a∨综合| 国产精品免费网站在线观看| 亚洲高清久久| 一区二区三区黄色| 国产一区亚洲| 999在线观看精品免费不卡网站| 国产一区二区三区久久久久久久久| 美腿丝袜亚洲色图| 国产精品毛片大码女人| 欧美成人免费全部观看天天性色| 欧美日韩亚洲一区二区三区在线| 欧美影片第一页| 欧美精品在线观看播放| 蜜臀av国产精品久久久久| 国产精品高清免费在线观看| 欧美成人自拍| 国产欧美va欧美va香蕉在| 亚洲国产一区二区精品专区| 国产视频亚洲精品| 一区二区久久久久久| 亚洲黄色小视频| 欧美一区二区成人6969| 亚洲综合久久久久| 欧美区视频在线观看| 欧美成人午夜激情在线| 国产一区二区三区日韩欧美| 亚洲欧美美女| 午夜亚洲伦理| 国产精品呻吟| 亚洲欧美国产另类| 午夜精品福利电影| 欧美性淫爽ww久久久久无| 亚洲乱码久久| 99精品热视频| 欧美日韩在线视频首页| 最近看过的日韩成人| 亚洲精品亚洲人成人网| 你懂的视频一区二区| 亚洲国产1区| 91久久久国产精品| 欧美成人伊人久久综合网| 美女黄网久久| 亚洲激情视频| 欧美精品一区在线| 艳女tv在线观看国产一区| 亚洲午夜性刺激影院| 欧美视频在线观看 亚洲欧| 99国内精品| 小嫩嫩精品导航| 国产亚洲美州欧州综合国| 欧美专区中文字幕| 男人插女人欧美| 亚洲精品视频二区| 欧美人与禽猛交乱配| 99日韩精品| 欧美一区二区在线看| 极品av少妇一区二区| 奶水喷射视频一区| 亚洲伦理中文字幕| 欧美亚洲一级| 亚洲国产精品一区二区尤物区| 欧美jjzz| 夜色激情一区二区| 久久精品一区四区| 亚洲激情一区二区三区| 欧美日韩在线高清| 欧美综合第一页| 亚洲区第一页| 性色av一区二区怡红| 亚洲成人原创| 欧美日韩福利在线观看| 亚洲一区二区三区三| 夜夜爽av福利精品导航| 国产精品xnxxcom| 久久久久久**毛片大全| 亚洲美女在线看| 久久久久久黄| 亚洲五月婷婷| 黄色免费成人| 国产精品国产a| 麻豆精品一区二区综合av| 一区二区三区**美女毛片 | 久久人人97超碰精品888| 亚洲日本理论电影| 国产日产精品一区二区三区四区的观看方式 | 欧美人与性动交α欧美精品济南到| 亚洲大黄网站| 午夜久久黄色| 日韩网站在线观看| 好看的亚洲午夜视频在线| 欧美日韩伦理在线| 久久久噜噜噜久噜久久 | 亚洲一区二区三区午夜| 欧美激情国产日韩精品一区18| 亚洲一区二区三区777| 在线成人免费观看| 国产日韩精品一区二区| 欧美黄色aa电影| 久久午夜精品一区二区| 亚洲欧美成aⅴ人在线观看| 91久久精品一区二区别| 欧美 日韩 国产精品免费观看| 午夜国产欧美理论在线播放 | 亚洲激情国产精品| 国产日韩视频| 国产精品va在线播放我和闺蜜| 免费精品视频| 久久久久亚洲综合| 欧美一级淫片aaaaaaa视频| 在线亚洲一区|