一、饿汉式
饿汉式的单例模式,可以确保在程序运行期间只会创建一个实例,但是它的缺点是在程序启动时就会创建实例,无论是否需要,可能会造成资源浪费。
代码示例:
/*
单例设计模式:保证一个类只有一个实例,并提供一个全局访问点来获取该实例
具体实现方式:
饿汉类
懒汉类
*/
#include <iostream>
using namespace std;
class Singleton{
private:
static Singleton* instance;
Singleton(){}
public:
static Singleton* getInstance()
{
return instance;
}
};
Singleton* Singleton::instance = new Singleton();//类外初始化不是访问,饿汉式实现
int main()
{
Singleton *s1 = Singleton::getInstance();
Singleton *s2 = Singleton::getInstance();
if(s1 == s2)
{
cout<<"同一个实例"<<endl;
}
else
{
cout<<"不是单例"<<endl;
}
return 0;
}
运行结果:
同一个实例
二、懒汉式
代码示例:
#include <iostream>
using namespace std;
class Singleton{
private:
static Singleton* instance;
//私有构造函数,防止实例化
Singleton(){}
public:
//获取单例实例的方法
static Singleton* getInstance()
{
//判断静态指针如果是空,开辟新空间
if(instance == nullptr)
{
instance = new Singleton();
}
//如果不为空,输出静态指针地址
return instance;
}
};
Singleton* Singleton::instance = nullptr;//类外初始化不是访问,懒汉式实现
int main()
{
Singleton *s1 = Singleton::getInstance();
Singleton *s2 = Singleton::getInstance();
if(s1 == s2)
{
cout<<"同一个实例"<<endl;
}
else
{
cout<<"不是单例"<<endl;
}
return 0;
}
运行结果:
同一个实例