单例模式:一个类只能生成一个对象的设计模式
1.屏蔽生成对象的接口,构造函数的实现和拷贝构造函数的声明,都放在私有下;
2.类中提供一个接口来生成唯一的对象 返回值必须是类*或者类&(保证不会产生临时对象);局部对象不能返回指针和引用,所以对象放在全局;
3.函数设置为静态的(static),摆脱接口对对象的依赖,用作用域可调用;
4.对象存放在堆上.(静态方法访问静态成员变量);
实现线程安全的单列模式:
1、 利用静态内部类实现单例模式:内部静态类只被加载一次;
class Singleton
{
public:
//利用静态内部类实现单例模式
static Singleton* getInstance()
{
return &single;
}
//static Singleton& getInstance()
//{
// return single;
//}
private:
Singleton(){}
Singleton(const Singleton&);
static Singleton single;
};
Singleton Singleton::single; //类中声明,类外实现
2、双重锁机制的单例模式
class Singleton
{
public:
//双重锁机制的单例模式
static Singleton* getInstance()
{
if (psing == NULL) //过滤对象已存在情况
{
lock();
if (psing == NULL) //防止时间片完时,通过另一个生成对象
{
psing = new Singleton();
}
unlock();
}
return psing;
}
private:
Singleton(){}
Singleton(const Singleton&);
static Singleton* psing;
};
Singleton* Singleton::psing = NULL;