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 }
复制代码

 

posted @   拾月凄辰  阅读(406)  评论(0编辑  收藏  举报
编辑推荐:
· 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代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示
主题色彩