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

            實時陰影繪制技術研究

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

            ANSI C++ 中的 Singleton 實現說難不難,說容易也不容易,很多人寫 ANSI C++ 的 Singleton class 都有錯誤。這篇文章討論怎樣在 ANSI c++ 中寫 Singleton class, 希望對大家有幫助。

            ? 《設計模式》中把 Singleton 寫成返回指針:



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

            ????? 相應的實現 cpp 文件是:


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

            ?

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


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


            ??? 但是這里存在的問題是,什么時候刪除 Singleton 對象?按照 C++ 的一個基本原則,對象在哪里創建就在哪里銷毀,這里還應該放一個 destroy 方法來刪除 Singleton 對象。如果忘了刪除就比較麻煩。Instance 函數還存在多線程同時訪問的加鎖問題。如果把 Instance 函數開始和結尾放上加鎖和解鎖,整個函數性能會下降很多。這不是一個好的設計。
            ??? 有一個小小的改動,可以避免忘了刪除 Singleton 對象帶來內存泄露的問題。那就是用 std:auto_ptr 來包含 Singleton 對象,定義一個class static member auto_ptr 對象,在析構的靜態 auto_ptr 變量的時候時候自動刪除 Singleton 對象。為了不讓用戶 delete Singleton 對象,需要將析構函數由 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 苦行僧 閱讀(1158) 評論(2)  編輯 收藏 引用 所屬分類: 轉載

            Feedback

            # re: C++ 中的Singleton 類的實現討論 2006-04-21 09:11 Stone Jiang
            當一個單體類引用另一個單體類的時候,在析構時,還要多加小心.
              回復  更多評論
              

            # re: C++ 中的Singleton 類的實現討論 2006-04-22 05:56 苦行僧
            但是我理解singlton一般就像static變量一樣,很少作為一個對象的屬性,實現上singlton也是用static來實現的,應該都是最后退出程序的時候析構吧。  回復  更多評論
              

            久久久久四虎国产精品| 亚洲va久久久噜噜噜久久天堂 | 久久人妻少妇嫩草AV无码专区| 久久久久久久久无码精品亚洲日韩| 亚洲国产美女精品久久久久∴ | 伊人 久久 精品| 久久91精品国产91久久麻豆| 麻豆精品久久久久久久99蜜桃 | 久久亚洲精品成人AV| 伊人久久大香线蕉精品不卡| 亚洲va久久久噜噜噜久久天堂| 狠狠色综合久久久久尤物| 久久99精品久久久久久久不卡| 欧美亚洲国产精品久久久久| 久久久无码精品午夜| 久久久久综合中文字幕| 久久人人爽人人爽人人AV东京热| 狠狠精品干练久久久无码中文字幕| 久久亚洲私人国产精品vA| 久久人人爽人人澡人人高潮AV| 精品一二三区久久aaa片| 久久久国产视频| 久久精品国产精品亚洲人人 | 久久se精品一区精品二区国产| 99久久无码一区人妻a黑| 精品久久久久成人码免费动漫 | jizzjizz国产精品久久| 狠狠色狠狠色综合久久| 久久亚洲sm情趣捆绑调教| 18岁日韩内射颜射午夜久久成人| 91久久精品无码一区二区毛片| 色诱久久久久综合网ywww| 人妻无码αv中文字幕久久琪琪布| 国产高潮久久免费观看| 亚洲欧美成人久久综合中文网 | 免费精品99久久国产综合精品| 久久久久久亚洲AV无码专区 | 狠狠色综合网站久久久久久久| 久久99国产精品二区不卡| 精品国产乱码久久久久久1区2区| 无码日韩人妻精品久久蜜桃|