[置顶] C++单例模式

Singleton单例模式
Singleton 是对全局变量的取代策略
作用:保证一个类只能有一个实例,并提供一个全局唯一的访问点。

单例模式的特点
(1)仅有一个实例:通过类的静态成员变量来体现,并且是私有的;
(2)提供访问它的全局访问点:访问静态成员变量的静态成员函数来体现。
《设计模式》一书中给出了一种很不错的实现,定义一个单例类,使用类的私有静态指针变量指向类的唯一实例,并用一个公有的静态方法获取该实例。

单例模式通过类本身来管理其唯一实例,这种特性提供了解决问题的方法。唯一的实例是类的一个普通对象,在设计这个类时,让它只能创建一个实例并提供对此实例的全局访问。唯一实例类Singleton在静态成员函数中隐藏创建实例的操作。习惯上把这个成员函数叫做Instance(),它的返回值是唯一实例的指针。

返回指针的单例

//它的构造函数是私有的,这样就不能从别处创建该类的实例。
class Singleton
{
public:
    static Singleton* getInstance();// 获得单例的静态全局访问节点
    static void destroyInstance();  // 销毁单例的静态全局访问节点
private:
    Singleton();                   // 私有的构造函数
    ~Singleton();                  // 私有的析构函数
    static Singleton* m_instance;  // 指向单例的私有静态成员指针
};

// 以下是实现
Singleton* Singleton::m_instance = NULL;

// 单例构造函数
Singleton::Singleton()
{
    std::cout<<"Singleton"<<std::endl;
}

// 单例析构函数
Singleton::~Singleton()
{
    std::cout<<"~Singleton"<<std::endl;
}

// 获得单例的全局访问点
Singleton* Singleton::getInstance()
{
    if (NULL == m_instance) 
    {
        m_instance= new Singleton();
    }
    std::cout<<"getInstance"<<std::endl;
    return m_instance;
}

// 销毁单例的全局访问点
void Singleton::destroyInstance()
{
    if (NULL != m_instance) 
    {
        delete m_instance;
        m_instance= NULL;
    }
    std::cout<<"destroyInstance"<<std::endl;
}

返回引用的单例

class Singleton
{
public:
    static Singleton& getMe()
    {
        static Singleton me;
        return me;
    }
private:
    Singleton(){}
    Singleton(const Singleton& singleton){}
    ~Singleton(){}
};

你可能感兴趣的:(设计模式,单例模式)