C++单例模式
单例模式
类只有一共实例,供全局使用如日志模块,任务管理器等等。
单例模式分为懒汉式和饿汉式,
饿汉式在类加载时就创建唯一实例,线程安全,启动时资源占用较高
懒汉式在第一次被使用时才会创建实例,需要机制实现线程安全,占用资源较少
饿汉式实现如下:
class Singleton { public: static Singleton* get() { return &s; } private: Singleton() = default; Singleton(const Singleton&) = delete; Singleton operator = (const Singleton&) = delete; static Singleton s; }; Singleton Singleton::s;
1.私有化构造函数,删除拷贝构造和赋值重载函数
2.提供static对象,在类外初始化
3.提供public获取该对象的指针的static方法,可以在不依赖this指针的情况下调用成员方法
注意,不能将get()写成这样
static Singleton get() { return s; }
这会返回一个副本,必须返回对象的指针或者引用
懒汉式单例模式
class Singleton { public: static Singleton* get() { static Singleton s; return &s; } private: Singleton() = default; Singleton(const Singleton&) = delete; Singleton operator = (const Singleton&) = delete; };
注意,这里使用了局部static变量,会在汇编层面保证它是线程安全的,所以不需要额外机制来保证线程安全性
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)