单例模式:一个类只能实例化一个对象
实现机制:
1.构造函数私有化
2.提供接口生成唯一对象
3.静态指针类外初始化
分类:
1、懒汉模式 (贪婪加载):线程不安全
只有在调用getInstance这个函数时这个类对象才会被实例化
class SingleTon
{
public:
static SingleTon* getInstance()
{
if (psingle == NULL)
{
psingle = new SingleTon();
}
return psingle;
}
private:
SingleTon(){}
SingleTon(const SingleTon&);
static SingleTon* psingle;
};
SingleTon* SingleTon::psingle = NULL;
int main()
{
return 0;
}
这是线程不安全的,所以为了线程安全,我们加了锁机制,但是又由于加锁解锁的效率太低,所以加上了双重判断
class SingleTon
{
public:
static SingleTon* getInstance()
{
if (psingle == NULL)
{
lock();
if (psingle == NULL)
{
psingle = new SingleTon();
}
unlock();
}
return psingle;
}
private:
SingleTon(){}
SingleTon(const SingleTon&);
static SingleTon* psingle;
};
SingleTon* SingleTon::psingle = NULL;
int main()
{
return 0;
}
2、饿汉模式:线程安全
在main函数之前,这个对象就会被生成
class SingleTon
{
public:
static SingleTon* getInstance()
{
return psingle;
}
private:
SingleTon(){}
SingleTon(const SingleTon&);
static SingleTon* psingle;
};
SingleTon* SingleTon::psingle = new SingleTon();