⼀个类只能创建⼀个对象,即单例模式,该设计模式可以保证系统中该类只有⼀个实例,并提供⼀个 访问它的全局访问点,该实例被所有程序模块共享。⽐如在某个服务器程序中,该服务器的配置信息 存放在⼀个文件中,这些配置数据由⼀个单例对象统⼀读取,然后服务进程中的其他对象再通过这个 单例对象获取这些配置信息,这种方式简化了在复杂环境下的配置管理。
单例模式有两种实现模式:饿汉模式和懒汉模式
一、饿汉模式
饿汉模式:程序启动时就会创建⼀个唯⼀的实例对象。因为单例对象已经确定,所以⽐较适用于多线程环境中,多线程获取单例对象不需要加锁,可以有效的避免资源竞争,提高性能。
//饿汉模式(以空间换时间)
#include <iostream>
class singleton{
private:
singleton()
:_data(129)
{
std::cout << "单例对象实例化成功!" << std::endl;
}
singleton(const singleton&) = delete;
~singleton(){}
private:
static singleton _eton;
int _data;
public:
static singleton& getsingleton()
{
return _eton;
}
int getdata()
{
return _data;
}
};
singleton singleton::_eton;
int main()
{
std::cout << singleton::getsingleton().getdata() << std::endl;
return 0;
}
二、懒汉模式
懒汉模式:第⼀次使⽤要使⽤单例对象的时候创建实例对象。如果单例对象构造特别耗时或者耗费济 源(加载插件、加载网络资源等),可以选择懒汉模式,在第⼀次使⽤的时候才创建对象。
这里应用C++11的特性,实现一个简单的懒汉单例模式。
#include <iostream>
//懒汉模式
class Singleton{
private:
int _data;
private:
Singleton()
:_data(625)
{
std::cout << "懒汉模式单例对象构造成功!" << std::endl;
}
Singleton(const Singleton& ) = delete;
~Singleton()
{
}
public:
static Singleton& GetInStance()
{
static Singleton _eton;
return _eton;
}
int GetData()
{
return _data;
}
};
int main()
{
std::cout << Singleton::GetInStance().GetData() << std::endl;
return 0;
}