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

大規(guī)模高性能網(wǎng)絡(luò)服務(wù)器編程 大型游戲服務(wù)器編程


大規(guī)模高性能網(wǎng)絡(luò)服務(wù)器編程 大型游戲服務(wù)器編程 完成端口模型 TCP UDP P2P 網(wǎng)絡(luò)編程

           C++博客 | 首頁(yè) | 發(fā)新隨筆 | 發(fā)新文章 | 聯(lián)系 | 聚合 | 管理

              

利用宏實(shí)現(xiàn)的一個(gè)singleton


代碼:uniobj.h
 1 /************************************************************************
 2 *
 3 * Created by kusamba@126.com at 2009-2-12 16:37
 4 */
 5 
 6 #ifndef _uniobj_23593953_h_
 7 #define _uniobj_23593953_h_
 8 
 9 #include <WTypes.h>
10 #include <assert.h>
11 
12 /**
13 * Universal Object Declare
14 */
15 #define UNIOBJ_DECL(theClass)                \
16   public:                                    \
17   static theClass* Get()                     \
18   {                                          \
19     assert(NULL != ms_pk##theClass);         \
20     return ms_pk##theClass;                  \
21   }                                          \
22   static theClass* Create()                  \
23   {                                          \
24     assert(NULL == ms_pk##theClass);         \
25     return ms_pk##theClass = new theClass(); \
26   }                                          \
27   static void Destroy()                      \
28   {                                          \
29     if (NULL != ms_pk##theClass)             \
30     {                                        \
31       delete ms_pk##theClass;                \
32       ms_pk##theClass = NULL;                \
33     }                                        \
34   }                                          \
35   publicbool Initialize();                 \
36   private:                                   \
37     theClass();                              \
38     virtual ~theClass();                     \
39     static theClass* ms_pk##theClass;
40 
41 /**
42 * Universal Object Implement
43 */
44 #define UNIOBJ_IMP(theClass)                \
45     theClass* theClass::ms_pk##theClass = NULL;
46 
47 
48 #endif//_uniobj_23593953_h_

如何使用:
頭文件:
1#include "uniobj.h"
2
3class ATestSingleTon
4{
5public:
6
7UNIOBJ_DECL(ATestSingleTon)
8}

cpp文件:
1UNIOBJ_IMP(ATestSingleTon)
2
     ATestSingleTon::ATestSingleTon()
    {}

    ATestSingleTon::~ATestSingleTon()
    {}

3bool ATestSingleTon::Initialize()
4{
5    return true;
6}

main.cpp
 1int main()
 2{
 3  ATestSingleTon* pk = ATestSingleTon::Create();
 4  if (NULL == pk)
 5  {
 6    return 0;
 7  }

 8
 9  //mainloop
10
11  ATestSingleTon::Destroy();
12}

分析:
1,singleton的構(gòu)建在程序入口,析構(gòu)在程序的結(jié)尾,可以避免相當(dāng)多的多線程問題
2,這里的singleton對(duì)象均為程序必須要用到的對(duì)象,跟傳統(tǒng)singleton定義有些出入
3,定義了initialize()函數(shù)只為對(duì)象的初始化提供一個(gè)接口,如果不需要可以直接return true


PS:可以參考看看如下資料
1,細(xì)說(shuō)Singleton模式:創(chuàng)建、多線程與銷毀 http://developer.51cto.com/art/200908/143492.htm

posted on 2010-08-31 15:56 iKusamba 閱讀(1497) 評(píng)論(10)  編輯 收藏 引用 所屬分類: C++技術(shù)

評(píng)論

# re: 利用宏實(shí)現(xiàn)的一個(gè)singleton 2010-08-31 18:00 陳梓瀚(vczh)

MySingleton& GetSingleton()
{
static MySingleton singleton;
return singleton;
}  回復(fù)  更多評(píng)論   

# re: 利用宏實(shí)現(xiàn)的一個(gè)singleton 2010-08-31 18:11 iKusamba

@陳梓瀚(vczh)

這是最常見的Meyers Singleton,有些編譯器可能會(huì)出錯(cuò),還有析構(gòu)時(shí)間沒有辦法控制,可能會(huì)導(dǎo)致K.D.L方面的問題

我的想法是避免多線程和內(nèi)存方面的問題  回復(fù)  更多評(píng)論   

# re: 利用宏實(shí)現(xiàn)的一個(gè)singleton 2010-09-01 10:13 陳碩

1. 既然對(duì)象肯定要用到而且會(huì)在main()里邊析構(gòu),那么用一個(gè)全局的指針不就行了?在main()里邊構(gòu)造一個(gè)局部對(duì)象,把全局指針指向它。完全不必用宏,也不必手動(dòng)釋放對(duì)象。
2. 為了防止在別處意外構(gòu)造對(duì)象,把構(gòu)造函數(shù)的參數(shù)定為 enum YouShouldNotConstructTheObjectUnlessInMain,這樣一搜源代碼就知道有沒有人故意誤用。
3. 為什么要默認(rèn)使用虛析構(gòu)?既然構(gòu)造函數(shù)是private的,說(shuō)明根本不可能創(chuàng)建派生類的對(duì)象,虛析構(gòu)意義何在?  回復(fù)  更多評(píng)論   

# re: 利用宏實(shí)現(xiàn)的一個(gè)singleton 2010-09-01 10:52 cpp

我覺得我們是否更應(yīng)該去避免這些問題的產(chǎn)生,而不是去想法來(lái)解決“會(huì)出現(xiàn)”的問題呢。  回復(fù)  更多評(píng)論   

# re: 利用宏實(shí)現(xiàn)的一個(gè)singleton 2010-09-01 12:05 iKusamba

@陳碩

感謝你提出的問題,我來(lái)逐條解釋下
“1. 既然對(duì)象肯定要用到而且會(huì)在main()里邊析構(gòu),那么用一個(gè)全局的指針不就行了?在main()里邊構(gòu)造一個(gè)局部對(duì)象,把全局指針指向它。完全不必用宏,也不必手動(dòng)釋放對(duì)象。”
"2. 為了防止在別處意外構(gòu)造對(duì)象,把構(gòu)造函數(shù)的參數(shù)定為 enum YouShouldNotConstructTheObjectUnlessInMain,這樣一搜源代碼就知道有沒有人故意誤用。"
答:全局變量和帶參數(shù)的構(gòu)造函數(shù)也是可以用的,這里討論的是singleton

“3. 為什么要默認(rèn)使用虛析構(gòu)?既然構(gòu)造函數(shù)是private的,說(shuō)明根本不可能創(chuàng)建派生類的對(duì)象,虛析構(gòu)意義何在?”
答:對(duì)象可能會(huì)有父類  回復(fù)  更多評(píng)論   

# re: 利用宏實(shí)現(xiàn)的一個(gè)singleton 2010-09-01 12:08 iKusamba

@cpp
你說(shuō)的也對(duì),
我覺得借助好的想法,好的框架再加上“更應(yīng)該去避免這些問題的產(chǎn)生”,能事半功倍!  回復(fù)  更多評(píng)論   

# re: 利用宏實(shí)現(xiàn)的一個(gè)singleton 2010-09-02 12:48 陳梓瀚(vczh)

@iKusamba
那就加CriticalSection哈,就沒事了。反正肯定會(huì)在main之后析構(gòu)的,這個(gè)也不用控制了。如果你想控制,那還是給你的singleton類加上“Close()”。  回復(fù)  更多評(píng)論   

# re: 利用宏實(shí)現(xiàn)的一個(gè)singleton 2010-09-02 12:49 陳梓瀚(vczh)

@iKusamba
應(yīng)該是“ExceptInMain”哈,Unless是不對(duì)的……  回復(fù)  更多評(píng)論   

# re: 利用宏實(shí)現(xiàn)的一個(gè)singleton 2010-09-02 16:11 iKusamba

@陳梓瀚(vczh)

在內(nèi)部有static的Destroy()

如果singleton中有new,可以在析構(gòu)函數(shù)中清除  回復(fù)  更多評(píng)論   

# re: 利用宏實(shí)現(xiàn)的一個(gè)singleton 2010-09-02 23:32 chaogu

我發(fā)現(xiàn)模式里面討論的最多的是單例,其實(shí)單例也就那么一回事。
線程安全好像討論的最多,線程安全各有各的說(shuō)法,有沒有更加有力的說(shuō)法?
  回復(fù)  更多評(píng)論   

公告

導(dǎo)航

隨筆分類

最新隨筆

最新評(píng)論

閱讀排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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一区二区| 国产精品天美传媒入口| 欧美日本不卡| 欧美日韩精品福利| 欧美亚日韩国产aⅴ精品中极品| 亚洲经典在线| 在线日韩欧美视频| 在线观看91精品国产麻豆| 亚洲第一区色| 一区二区三区精品国产| 亚洲美女黄网| 一区二区福利| 欧美一区二区在线看| 亚洲国产另类精品专区| 欧美日韩一区二区国产| 国产精品福利网| 国产小视频国产精品| 国内精品写真在线观看| 亚洲国产高清视频| 亚洲视频精品| 久久这里有精品15一区二区三区| 一色屋精品视频免费看| 中国av一区| 狼人社综合社区| 欧美三日本三级三级在线播放| 国产精品国产三级国产专区53 | 久久久久久久久久码影片| 欧美国产专区| 欧美一区二区三区男人的天堂| 久久影院午夜论| 国产丝袜美腿一区二区三区| 91久久在线视频| 欧美a级一区二区| 午夜精品久久久久久久| 欧美日韩国产在线| 91久久综合亚洲鲁鲁五月天| 久久不见久久见免费视频1| 日韩亚洲一区二区| 欧美亚洲综合另类| 一本色道久久88精品综合| 欧美国产亚洲精品久久久8v| 国内精品一区二区| 久久av一区二区三区| 中文高清一区| 国产日韩欧美亚洲一区| 久久久久欧美精品| 亚洲免费一区二区| 老司机午夜精品视频| 在线成人性视频| 裸体歌舞表演一区二区| 麻豆成人在线| 中文亚洲免费| 亚洲欧美日韩第一区| 国产一区二区三区黄| 老司机67194精品线观看| 久久亚洲影音av资源网| 国产精品蜜臀在线观看| 久久精品国产2020观看福利| 久久久国产一区二区| 亚洲毛片在线免费观看| 亚洲一区二区精品| 欧美精品福利| 欧美日韩一二三区| 亚洲视频中文| 美腿丝袜亚洲色图| 欧美一区二区三区男人的天堂| 欧美**人妖| 国产精品亚洲一区| 日韩视频免费观看高清在线视频| 国产在线乱码一区二区三区| 日韩视频一区二区三区在线播放| 久久亚洲高清| 久久精品欧美| 亚洲国产欧美日韩另类综合| 国产精品热久久久久夜色精品三区 | 国产日韩一区| 午夜精品视频在线| 久久精品亚洲乱码伦伦中文 | 久久激情视频| 午夜精品在线观看| 欧美色欧美亚洲另类七区| 亚洲高清久久网| 激情久久久久| 久久乐国产精品| 欧美一区二区在线免费观看| 欧美日韩高清区| 亚洲人体影院| 99re6这里只有精品视频在线观看| 久久久免费观看视频| 亚洲欧美怡红院| 国产精品久久久免费| 亚洲欧洲精品一区| 中国成人黄色视屏| 国产精品久久久久久久久免费| 亚洲精品久久久久久下一站| 亚洲精品欧美精品| 国产精品每日更新在线播放网址| 亚洲欧洲在线观看| 亚洲淫性视频| 午夜欧美大尺度福利影院在线看| 国产精品久久久999| 亚洲国产小视频在线观看| 亚洲国产专区校园欧美| 欧美图区在线视频| 欧美一区二区精品在线| 欧美激情在线有限公司| 99国产精品久久| 亚洲欧美日韩国产另类专区| 欧美日韩一区二区视频在线观看| 欧美激情在线观看| 亚洲尤物在线| 在线播放亚洲一区| 国产精品久久久久久影院8一贰佰| 亚洲日韩欧美视频| 久久国产精品网站| 亚洲国产天堂网精品网站| 欧美视频在线看| 久久综合五月| 久久精品国产999大香线蕉| 亚洲高清在线精品| 美女任你摸久久| 久久久国产视频91| 欧美亚洲一区二区在线| 亚洲一区www| 99精品视频网| 国产精品亚洲一区| 欧美人妖在线观看| 久久久久久国产精品一区| 亚洲一卡久久| 亚洲无限乱码一二三四麻| 99日韩精品| 亚洲在线成人精品| 欧美专区日韩专区| 午夜视频一区| 六十路精品视频| 欧美激情成人在线| 欧美日韩精品免费| 欧美视频一区二区三区在线观看| 蜜臀av一级做a爰片久久| 麻豆精品网站| 国产精品久久久久久久久免费桃花| 欧美肉体xxxx裸体137大胆| 这里只有精品视频在线| 亚洲午夜久久久| 久久久www成人免费无遮挡大片| 欧美一区二区高清| 欧美中文日韩| 国产精品国产三级国产aⅴ无密码| 欧美大尺度在线观看| 欧美视频免费在线观看| 国产一区日韩欧美| 一本色道久久加勒比精品| 亚洲综合视频1区| 美国三级日本三级久久99| 野花国产精品入口| 欧美激情欧美激情在线五月| 国产精品一区二区黑丝| 亚洲美女精品一区| 国产日韩欧美成人| 日韩亚洲欧美在线观看| 久久久不卡网国产精品一区| 一级日韩一区在线观看| 欧美一区在线直播| 国产乱码精品| 久久久久久久久综合| 性做久久久久久免费观看欧美| 欧美视频一区在线| 亚洲无线视频| 一区二区三区视频在线| 欧美视频一区二区三区四区| 99精品免费网| 中国日韩欧美久久久久久久久| 欧美成人午夜77777| 夜夜夜久久久| 亚洲桃花岛网站| 国产日韩欧美一区二区| 久久精品国产综合| 免费h精品视频在线播放| 99亚洲一区二区| 篠田优中文在线播放第一区| 亚洲国产高清视频| 久久亚裔精品欧美| 欧美精品尤物在线| 久久久91精品国产| 欧美噜噜久久久xxx| 午夜激情综合网| 免费看亚洲片| 亚洲永久免费观看| 久久久久综合网| 欧美91大片| 亚洲深夜福利网站| 久热精品视频在线观看| 亚洲欧美日韩国产一区二区三区 | 亚洲永久视频| 亚洲国产高潮在线观看|