单例模式指的是,无论怎么获取,永远只能得到该类类型的唯一一个实例对象
那么设计一个单例就必须要满足下面三个条件:
-
构造函数私有化,这样用户就不能任意定义该类型的对象了;
-
定义该类型唯一的对象;
-
通过一个static静态成员方法返回唯一的对象实例;
常用场景:日志模块,数据库模块。
饿汉式单例模式
还没有获取实例对象,就已经产生了。饿汉式一定是线程安全的。因为单例对象定义成了一个static静态对象,对象会在main函数之前处理好,存在数据段。
class Singleton
{
public:
//获取类的实例对象的接口方法
static Singleton* getInstance()
{
return &instance;
}
private:
//定义一个唯一的类实例对象
static Singleton instance;
//构造函数私有化
Singleton()
{
}
//防止拷贝构造
Singleton(const Singleton&)=delete;
//去掉赋值重载
Singleton& operator=(const Singleton&)=delete;
};
//静态成员在类外初始化
Singleton Singleton::instance;
int main()
{
Singleton *p1=Singleton::get