设计模式中单例模式是相对简单的设计模式,其设计模式的核心思想为对应的类只能实例化一个对象,通常这个对象伴随着整个程序的生命周期,当然我们也可以自主的去释放掉该对象,单例模式通常有两种实现方式,一种为懒汉模式,一种为饿汉模式,其实所谓的懒汉模式即为延迟加载技术,通俗讲即为等到用的时候才去创建,这种技术相当于以时间换空间,而饿汉模式正好相反, 即为以空间换时间,并且饿汉模式的实现方式也相对更加简单一些。废话少说直接上代码。
懒汉模式:解决多线程中单例模式-设计理念采用double-lock 双重锁定。
class CSingleton
{
public:
static CSingleton* InitInstance()//静态函数 直接访问类函数
{
if(m_ptr == NULL) //多线程首先屏蔽一层m_ptr为非空的
{
Lock();//进入临界区
if (m_ptr == NULL)//防止重复new
{
m_ptr = new CSingleton;
return m_ptr;
}
UNLock();
}
}
static void Destory()
{
delete m_ptr;
m_ptr = NULL;
}
private://将类的构造函数、拷贝构造、赋值构造全部私有化
static CSingleton *m_ptr;
CSingleton();
CSingleton(const CSingleton &other);
CSingleton & operator=(const CSingleton &other);
};
CSingleton * CSingleton::m_ptr = NULL;
饿汉模式: 简单到爆 不多说了
class CSingleton
{
public:
static CSingleton * InitInstance()
{
return m_ptr;
}
static void Destory()
{
delete m_ptr;
m_ptr = NULL;
}
private:
static CSingleton *m_ptr;
CSingleton();
CSingleton(const CSingleton &other);
CSingleton & operator=(const CSingleton &other);
};
CSingleton * CSingleton::m_ptr = new CSingleton;;