设为首页 加入收藏

TOP

C++完美实现Singleton模式(三)
2012-12-10 12:49:19 来源: 作者: 【 】 浏览:986
Tags:完美 实现 Singleton 模式

 

    CresGuard 类主要的功能是线程访问同步,代码如下:

    1 class CResGuard {

    2 public:

    3    CResGuard()  { m_lGrdCnt = 0; InitializeCriticalSection(&m_cs); }

    4    ~CResGuard() { DeleteCriticalSection(&m_cs); }

    5

    6    // IsGuarded is used for debugging

    7    BOOL IsGuarded() const { return(m_lGrdCnt > 0); }

    8

    9 public:

    10    class CGuard {

    11    public:

    12       CGuard(CResGuard& rg) : m_rg(rg) { m_rg.Guard(); };

    13       ~CGuard() { m_rg.Unguard(); }

    14

    15    private:

    16       CResGuard& m_rg;

    17    };

    18

    19 private:

    20    void Guard()   { EnterCriticalSection(&m_cs); m_lGrdCnt++; }

    21    void Unguard() { m_lGrdCnt--; LeaveCriticalSection(&m_cs); }

    22

    23    // Guard/Unguard can only be accessed by the nested CGuard class.

    24    friend class CResGuard::CGuard;

    25

    26 private:

    27    CRITICAL_SECTION m_cs;

    28    long m_lGrdCnt;   // # of EnterCriticalSection calls

    29 };

    问题四  实用方法

    比如你有一个需要实现单件模式的类,就应该这样实现:

    1 #include “singleton.h”

    2 using namespace C2217::Pattern;

    3

    4 class ServiceManger

    5 {

    6 public:

    7        void Run()

    8        {

    9        }

    10 private:

    11        ServiceManger(void)

    12        {

    13        }

    14        virtual ~ServiceManger(void)

    15        {

    16        }

    17        DECLARE_SINGLETON_CLASS(ServiceManger);

    18 };

    19

    20 typedef Singleton<ServiceManger> SSManger;

    在使用的时候很简单,跟一般的Singleton实现的方法没有什么不同.

    1 int _tmain(int argc, _TCHAR* argv[])

    2 {

    3         SSManger::instance()->Run();

    4 }

    一个简单的Singleton模式的实现,可以看到C++(www.cppentry.com)语言背后隐藏的丰富的语意,我希望有人能实现一个更好的Singleton让大家学习.

      

首页 上一页 1 2 3 4 下一页 尾页 3/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C++将字符串转换成数字 下一篇C++拷贝构造函数详解

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: