浅谈C++设计模式之单例模式
单例模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点。
通常我们可以让一个全局变量使得一个对象被访问,但它不能防止客户实例化多个对象,一个最好的办法就是让类自身负责保护它的唯一实例,这个类可以保证没有其它实例可以被创建,并且它可以提供一个访问该实例的方法。
单例模式因为Singleton类封装它的唯一实例,这样它可以严格控制客户怎样访问它以及何时访问它,简单地说就是对唯一实例的受控访问。
实现原理:将构造函数私有化,只提供一个静态方法来创建一个对象。
(1) 将构造函数设置成private;
(2) 声明一个静态的字段,初始化一个实例,返回Singleton对象;
(3) 用静态方法或静态属性,返回那个唯一的实例
当然,在对象用多线程时,可能会造成创建多个实例,可以给创建对象的过程加锁。
- Singleton:定义一个Instance操作
class Singleton{ public: static Singleton* Instance(); protected: Singleton(){} Singleton(const Singleton &instance){} Singleton& operator=(const Singleton &instance){} private: static Singleton* instance; }; Singleton* Singleton::Instance(){ if(instance == 0) instance = new Singleton; return instance; } Singleton* Singleton::instance = 0;
其实,单例模式中最关键的就是把public的构造函数私有化。这样就把构造对象的实例化的权利交给了类本身,让Singleton来控制类的实例化。当然除了构造函数之外,还需要把类的控制复制函数(拷贝构造函数,赋值运算)私有化,因为客户端没有构造的权利,所以也就没有使用控制复制函数的权利。
版权所有,欢迎转载,转载请注明出处!
每一个不曾起舞的日子里都是对以往生命的辜负!!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?