C++实现单例模式
单例模式
概念:只能创建一个对象的类
实现关键: 1、所有构造函数都必须是private的(包括带参构造,拷贝构造,赋值运算符)
2、通过static成员函数申请对象空间,并返回地址
3、定义一个静态标记,记录对象的个数,并控制
4、析构函数将标记清空,以达到重复申请对象的目的,析构函数是public的
5、赋值运算符、拷贝构造函数也必须是private的,由于编译器默认合成的赋值运算符和拷贝构造函数都是public的,所以这两个函数都要人为定义,而不能由编辑器默认合成
代码实现:
1 #include <iostream> 2 3 using namespace std; 4 5 class Single 6 { 7 private: //由于单例模式下所有构造函数都必须是private的,但编译器默认合成的所有构造函数都是public的, 8 Single() = default; //所以此时所有构造函数都要人为定义一遍 9 Single(const Single&) = default; 10 Single& operator=(const Single&) = default; 11 12 public: 13 static int flag ; 14 static Single* creat(); 15 ~Single() //析构函数是public的 16 { 17 flag = 0; 18 } 19 }; 20 21 int Single::flag = 0; 22 23 Single* Single::creat() 24 { 25 if (flag == 0) 26 { 27 flag = 1; 28 return (new Single); 29 } 30 else 31 return nullptr; 32 } 33 34 35 int main() 36 { 37 Single *p1 = Single::creat(); //创建一个对象 38 delete p1; //销毁此对象 39 40 Single *p2 = Single::creat(); //正确:由于之前的对象已经被销毁,所以可以创建一个新对象 41 Single *p3 = Single::creat(); //错误:该类只能存在一个唯一对象,故此时p3被创建为nullptr 42 43 return 0; 44 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南