单例模式保证某个类对象在进程中只被初始化一次,使用的场景是对一个可复用的资源在一个进程中只初始化一次直到进程结束再释放,这样就可以避免重复构造析构带来的额外性能消耗
目录
饿汉模式
饿汉模式的特点是空间换时间,无论我们需要的类在什么时候使用,一律在进程开始时进行初始化,优点当然是方便不会有什么线程安全问题,缺点是会带来额外的空间损耗
#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;
}
懒汉模式
懒汉模式的特点是时间换空间,只有在类对象真正被使用到时才进行初始化
简单加锁实现的低效的线程安全
#incl

本文探讨了单例模式在多线程环境中的实现,包括饿汉模式、懒汉模式以及简单加锁实现的线程安全问题。特别指出二次锁定检查模式的非线程安全性,并介绍了如何利用C++11的`std::call_once`来确保线程安全地创建单例,避免性能浪费。
最低0.47元/天 解锁文章
1201

被折叠的 条评论
为什么被折叠?



