C++ 实现单例模式

来源:互联网 发布:找对象软件靠谱吗 编辑:程序博客网 时间:2024/06/06 16:25

实现

#pragma once#include <windows.h>/*使用临界区来枷锁和解锁*/class LockBase{private:    // Singleton是LockBase友元,在Singleton类内部可以访问LockBase的私有成员    friend class Singleton;    CRITICAL_SECTION cs;    void lock()    {        EnterCriticalSection(&cs);    }    void unlock()    {        LeaveCriticalSection(&cs);    }public:    LockBase()    {        InitializeCriticalSection(&cs);    }    ~LockBase()    {        DeleteCriticalSection(&cs);    }};class Singleton{private:    static Singleton* instance;    Singleton(){}public:    static Singleton* getInstance()    {        // 使用双重检验枷锁机制        if (NULL == instance)        {            LockBase* lockBase = new LockBase();            lockBase->lock();            if (NULL == instance)            {                instance = new Singleton();            }            lockBase->unlock();        }        return instance;    }};// 注意C++中静态变量在类内是声明,在类外是定义Singleton* Singleton::instance = NULL;

测试

#include "Singleton.h"#include <iostream>using namespace std;int main(){    Singleton* s1 = Singleton::getInstance();    Singleton* s2 = Singleton::getInstance();    if (s1 == s2)    {        cout << "s1 和 s2 指向是同一个对象" << endl;    }    return 0;}

注意

注意代码的细节,注意C++中静态变量的定义是在类外。

1 0
原创粉丝点击