C++实现单例模式
2023-09-11 14:19:04 时间
单例模式
概念:只能创建一个对象的类
实现关键: 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 }
相关文章
- C++设计模式 ==> 装饰(者)模式
- 基于C++简单Windows API的socket编程(阻塞模式)
- C++之单例模式
- 大话设计模式C++实现-第15章-抽象工厂模式
- 大话设计模式C++版——代理模式
- qt实现web服务器加载vue应用进行C++和html混合编程-连载【6】-企业级系统开发实战连载系列 -技术栈(vue、element-ui、qt、c++、sqlite)
- 托管C++线程锁实现 c++11线程池
- 设计模式C++实现——工厂方法模式
- [c++菜鸟]《Accelerate C++》读书笔记
- 【C++】访问者模式
- C++ socket编程 实现服务端与客户端的通讯
- [C++]:万字超详细讲解多态以及多态的实现原理(面试的必考的c++考点)
- C++:C语言实现HTTP的GET和POST请求
- 《从缺陷中学习C/C++》——6.5 变量的作用域
- C++ 单例模式学习(Singleton)
- 纪念逝去的岁月——C/C++字符串旋转
- C++外观模式
- C++适配器模式
- C++建造者模式
- C++命令模式
- Linux环境下配置vscode的C/C++编译环境
- 【转载】 vscode如何在最新版本中配置c/c++语言环境中的launch.json和tasks.json?
- 单例模式及C++实现代码
- 161、【动态规划】leetcode ——139. 单词拆分:回溯法+动态规划(C++版本)
- 大话设计模式C++实现-第17章-适配器模式
- 在CC++中char 、short 、int各占多少个字节
- C++ 类 析构函数