单例模式为了确保一个类只有一个实例, 并且提供一个全局访问点
单例模式需要确定是否需要线程安全
单例模式按加载方式分类懒汉式跟饿汉式
懒汉式: 需要的时候再实例化
#ifndef Singleton_h
#define Singleton_h
class Singleton
{
public:
static Singleton *getInstance()
{
if (!uniqueInstance)
{
// 懒汉模式可以在这里加锁实现多线程同步
/*lock();
if (!uniqueInstance)
{
uniqueInstance = new Singleton();
}
unlock();*/
// 也可以在类内部使用静态变量, 同样需要注意多线程同步问题
// static Singleton *uniqueInstance = new Singleton();
// return uniqueInstance;
uniqueInstance = new Singleton();
}
return uniqueInstance;
}
private:
Singleton() { }
static Singleton *uniqueInstance;
};
// 懒汉模式, 用到的时候再实例化, 注意多线程情况
// Singleton *Singleton::uniqueInstance = 0;
#endif
饿汉式:先实例化
#ifndef Singleton_h
#define Singleton_h
class Singleton
{
public:
static Singleton *getInstance()
{
return uniqueInstance;
}
private:
Singleton() { }
static Singleton *uniqueInstance;
};
// 饿汉模式, 不需要担心多线程问题
Singleton *Singleton::uniqueInstance = new Singleton();
#endif