• <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>

            實(shí)時(shí)陰影繪制技術(shù)研究

            C++博客 首頁(yè) 新隨筆 聯(lián)系 聚合 管理
              48 Posts :: 20 Stories :: 57 Comments :: 0 Trackbacks
            from:http://www.pconline.com.cn/pcedu/empolder/gj/c/0407/421424.html

            ANSI C++ 中的 Singleton 實(shí)現(xiàn)說難不難,說容易也不容易,很多人寫 ANSI C++ 的 Singleton class 都有錯(cuò)誤。這篇文章討論怎樣在 ANSI c++ 中寫 Singleton class, 希望對(duì)大家有幫助。

            ? 《設(shè)計(jì)模式》中把 Singleton 寫成返回指針:



            class Singleton{
            public:
            ??? static Singleton* Instance();
            protected:
            ??? Singleton();
            private:
            ??? static Singleton* _instance;
            };

            ????? 相應(yīng)的實(shí)現(xiàn) cpp 文件是:


            Singleton* Singleton::_instance;
            Singleton* Singleton::Instance(){
            ??? if( _instance == 0){
            ??????? _instance = new Singleton;
            ??? };
            ??? return _instance;
            }

            ?

            ??? 將構(gòu)造函數(shù)設(shè)計(jì)成 protected 的目的是防止在 class 外面 new ,有人可能會(huì)設(shè)計(jì)成 private ,如果考慮到有可能會(huì)繼承這個(gè)類的話,還是將構(gòu)造函數(shù)設(shè)計(jì)成 protected 比較好,還需要加一個(gè) virtual 析構(gòu)函數(shù)。為了防止別人復(fù)制 Singleton 對(duì)象:


            Singleton* pSingleton = Singleton::Instance();
            Singleton s1 = *pSingleton;
            Singleton s2 = *pSingleton;
            需要將拷貝構(gòu)造(copy constructor)函數(shù)變成 private。


            ??? 但是這里存在的問題是,什么時(shí)候刪除 Singleton 對(duì)象?按照 C++ 的一個(gè)基本原則,對(duì)象在哪里創(chuàng)建就在哪里銷毀,這里還應(yīng)該放一個(gè) destroy 方法來刪除 Singleton 對(duì)象。如果忘了刪除就比較麻煩。Instance 函數(shù)還存在多線程同時(shí)訪問的加鎖問題。如果把 Instance 函數(shù)開始和結(jié)尾放上加鎖和解鎖,整個(gè)函數(shù)性能會(huì)下降很多。這不是一個(gè)好的設(shè)計(jì)。
            ??? 有一個(gè)小小的改動(dòng),可以避免忘了刪除 Singleton 對(duì)象帶來內(nèi)存泄露的問題。那就是用 std:auto_ptr 來包含 Singleton 對(duì)象,定義一個(gè)class static member auto_ptr 對(duì)象,在析構(gòu)的靜態(tài) auto_ptr 變量的時(shí)候時(shí)候自動(dòng)刪除 Singleton 對(duì)象。為了不讓用戶 delete Singleton 對(duì)象,需要將析構(gòu)函數(shù)由 public 變成 protected。以下是頭文件 SingletonAutoPtr.h :


            #include <memory>
            using namespace std;
            class CSingletonAutoPtr
            {
            private:
            ??? static auto_ptr<CSingletonAutoPtr> m_auto_ptr;

            posted on 2006-03-27 13:57 苦行僧 閱讀(1163) 評(píng)論(2)  編輯 收藏 引用 所屬分類: 轉(zhuǎn)載

            Feedback

            # re: C++ 中的Singleton 類的實(shí)現(xiàn)討論 2006-04-21 09:11 Stone Jiang
            當(dāng)一個(gè)單體類引用另一個(gè)單體類的時(shí)候,在析構(gòu)時(shí),還要多加小心.
              回復(fù)  更多評(píng)論
              

            # re: C++ 中的Singleton 類的實(shí)現(xiàn)討論 2006-04-22 05:56 苦行僧
            但是我理解singlton一般就像static變量一樣,很少作為一個(gè)對(duì)象的屬性,實(shí)現(xiàn)上singlton也是用static來實(shí)現(xiàn)的,應(yīng)該都是最后退出程序的時(shí)候析構(gòu)吧。  回復(fù)  更多評(píng)論
              

            93精91精品国产综合久久香蕉| 四虎影视久久久免费观看| 婷婷久久久亚洲欧洲日产国码AV| 99久久香蕉国产线看观香| 久久精品aⅴ无码中文字字幕不卡| 精品永久久福利一区二区| 精品久久综合1区2区3区激情| 香蕉久久夜色精品国产2020| .精品久久久麻豆国产精品| 国产精品99久久久久久宅男小说| 久久人人爽人人爽人人片av高请| 久久天天躁狠狠躁夜夜av浪潮| 无遮挡粉嫩小泬久久久久久久| 久久精品无码一区二区三区免费| 久久精品人人做人人爽电影| 久久国产精品国语对白| 国产婷婷成人久久Av免费高清| 香蕉aa三级久久毛片 | 久久激情亚洲精品无码?V| 国内精品久久久久影院薰衣草| 国产毛片久久久久久国产毛片| 国产一级持黄大片99久久| 亚洲精品无码久久一线| 狠狠色丁香久久婷婷综合蜜芽五月 | 久久人人爽人人人人片av| 久久久精品国产亚洲成人满18免费网站 | 一级做a爰片久久毛片免费陪| 99久久国产免费福利| 国产成人久久激情91| 久久久久亚洲精品天堂| 久久综合久久自在自线精品自| 99精品久久久久久久婷婷| 久久婷婷五月综合国产尤物app | 久久久久国产亚洲AV麻豆| 国产精品久久久久一区二区三区| 国产精品久久久天天影视| 狠狠色丁香婷综合久久| 91久久精品国产91性色也| 岛国搬运www久久| 久久久久国产精品三级网| 亚洲午夜精品久久久久久app|