单例模式保证某个类对象在进程中只被初始化一次,使用的场景是对一个可复用的资源在一个进程中只初始化一次直到进程结束再释放,这样就可以避免重复构造析构带来的额外性能消耗
目录
饿汉模式
饿汉模式的特点是空间换时间,无论我们需要的类在什么时候使用,一律在进程开始时进行初始化,优点当然是方便不会有什么线程安全问题,缺点是会带来额外的空间损耗
#include<iostream>
class Singleton
{
private:
Singleton()
{
std::cout << "Singleton()" << std::endl;
}
static Singleton* p;
public:
static Singleton* instance();
void show()
{
std::cout << "Show Singleton" << std::endl;
}
};
Singleton* Singleton::p = new Singleton();
Singleton* Singleton::instance()
{
return p;
}
int main()
{
Singleton* temp = Singleton::instance();
temp->show();
system("pause");
return 0;
}
懒汉模式
懒汉模式的特点是时间换空间,只有在类对象真正被使用到时才进行初始化
简单加锁实现的低效的线程安全
#include<iostream>
#include<mutex>
class Singleton
{
private:
Singleton()
{
std::cout <&