单例模式
简要说明
单例模式是设计模式中最常见的设计模式之一,常被运用于线程池、对象池等对象的创建中。
单例模式一般可分为两种模式:饿汉模式和懒汉模式。顾名思义,饿汉模式是类加载时就创建该对象,懒汉模式
则是等需要使用该对象的时候才去创建。
饿汉模式的优点是线程安全,因为它一开始就将对象给创建完毕,但缺点也是由于创建后未必会立刻调用这个对象,
这个实例对象保存在内存中会造成一定程度上的浪费。
懒汉模式则是在需要使用该对象时才会创建,这也就带来线程不够安全的问题。
//饿汉
#include<iostream>
#include<string>
using namespace std;
class Singleton
{
public:
static Singleton* getInstance();
private:
Singleton(){
cout<<"create Singleton"<<endl;
}
~Singleton()=default;
Singleton(const Singleton&)=delete;
Singleton& operator=(const Singleton&)=delete;
Singleton(const Singleton&&)=delete;
Singleton& operator=(const Singleton&&)=delete;
static Singleton* m_instance;
};
Singleton* Singleton::m_instance=new Singleton();
Singleton* Singleton::getInstance()
{
return m_instance;
}
int main()
{
Singleton* a= Singleton::getInstance();
Singleton* b= Singleton::getInstance();
return 0;
}
//懒汉 用静态局部变量实现
#include<iostream>
#include<string>
using namespace std;
class Singleton
{
public:
static Singleton* getInstance();
private:
Singleton(){
cout<<"create Singleton"<<endl;
}
~Singleton()=default;
Singleton(const Singleton&)=delete;
Singleton& operator=(const Singleton&)=delete;
Singleton(const Singleton&&)=delete;
Singleton& operator=(const Singleton&&)=delete;
};
Singleton* Singleton::getInstance()
{
static Singleton instance;
return &instance;
}
int main()
{
Singleton* a= Singleton::getInstance();
Singleton* b= Singleton::getInstance();
return 0;
}