单例模式指的是,无论怎么获取,永远只能得到该类类型的唯一一个实例对象
那么设计一个单例就必须要满足下面三个条件:
-
构造函数私有化,这样用户就不能任意定义该类型的对象了;
-
定义该类型唯一的对象;
-
通过一个static静态成员方法返回唯一的对象实例;
常用场景:日志模块,数据库模块。
饿汉式单例模式
还没有获取实例对象,就已经产生了。饿汉式一定是线程安全的。因为单例对象定义成了一个static静态对象,对象会在main函数之前处理好,存在数据段。
class Singleton
{
public:
//获取类的实例对象的接口方法
static Singleton* getInstance()
{
return &instance;
}
private:
//定义一个唯一的类实例对象
static Singleton instance;
//构造函数私有化
Singleton()
{
}
//防止拷贝构造
Singleton(const Singleton&)=delete;
//去掉赋值重载
Singleton& operator=(const Singleton&)=delete;
};
//静态成员在类外初始化
Singleton Singleton::instance;
int main()
{
Singleton *p1=Singleton::getInstance();
Singleton *p2=Singleton::getInstance();
Singleton *p3=Singleton::getInstan
深入理解单例模式:从饿汉到线程安全的懒汉

单例模式是一种确保类只有一个实例并提供全局访问点的设计模式。本文探讨了如何在C++中实现单例模式,包括饿汉式和两种线程安全的懒汉式。饿汉式在程序启动时即创建实例,保证线程安全。而懒汉式则在首次请求时才创建实例,但原始的懒汉式存在线程不安全问题。为解决这个问题,文中介绍了两种实现线程安全的懒汉式单例模式,一种是通过互斥锁来保证并发环境下的安全性。
最低0.47元/天 解锁文章
1520

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



