定义
保证类只有一个对象实例, 并提供一个访问它的全局访问点
难点
- 只有一个对象实例
- 提供一个全局访问点
- 线程安全
代码实现
方法一
在C++11之后,通过静态局部成员变量的特性来实现单例模式
- 第一次调用
getInstance
实例化静态局部成员变量instance
- 之后每次调用
getInstance
都是返回第一次实例化的instance
- 编译器会通过一定手段保证线程安全
class Singleton
{
public:
static Singleton& getInstance()
{
static Singleton instance;
return instance;
}
private:
Singleton(){}
Singleton(const Singleton&){}
Singleton& opreator=(const Singleton&){}
};
方法二
通过double check
的方法
class Singleton
{
public:
static Singleton* getInstance()
{
if(NULL == m_instance)
{
MutexLock(m_mutex);
if(NULL == m_instance)
m_instance = new Singleton;
return m_instance;
}
}
private:
Singleton(){}
Singleton(const Singleton&){}
Singleton& operator=(const Singleton&){}
private:
static Singleton* m_instance;
static pthread_mutex_t m_mutex;
};
pthread_mutex_t Singleton::m_mutex;
Singleton* Singleton::m_instance = NULL;