单例模式
单例模式 创建性模式 对象的创建方式
一个类不管创建多少次对象,永远只能得到该类型一个对象的实例
常用类型:
日志模块,写日志信息,没有必要每次写日志就创建对象,占用内存
数据库模块,数据库请求很多,没有必要每次生成一个数据库对象
饿汉单例模式:还没有获取实例对象,实例对象就已经产生了
懒汉单例模式:唯一实例对象,直到第一次获取它的时候,才产生
懒汉式单例模式
class Singleton
{
public:
static Singleton* getInstance()
{
return &instance;
}
private:
Singleton()
{
}
Singleton(const Singleton& val) = delete;
Singleton& operator=(const Singleton& val) = delete;
static Singleton instance;
};
Singleton Singleton::instance;
饿汉式线程所单例模式
class Singleton2
{
public:
static Singleton2* getInstance()
{
if (instance == nullptr)
{
lock_guard<std::mutex> guard(mtx);
if (instance == nullptr)
{
instance = new Singleton2();
}
}
return instance;
}
private:
Singleton2(){}
Singleton2(const Singleton2& val) = delete;
Singleton2& operator=(const Singleton2& val) = delete;
static Singleton2* volatile instance;
};
static Singleton2* volatile instance = nullptr;
饿汉式静态对象单例模式
class Singleton3
{
public:
static Singleton3* getInstance()
{
static Singleton3 instance;
return &instance;
}
private:
Singleton3() {}
Singleton3(const Singleton3& val) = delete;
Singleton3& operator=(const Singleton3& val) = delete;
static Singleton3* instance;
};
static Singleton3* instance = nullptr;