当前位置: 首页 > news >正文

1.单例模式

1.单例模式:软件系统设计中,整个系统在大多数情况下只需要一个全局对象。创建类的实例化对象必然要申请内存、消耗资源。可想而知,如果系统进行多个实例对象的创建,消耗的资源必然也会加倍。因此,单例模式考虑的是在只需要一个全局对象的时候,就不创建第二个实例化对象,不再进行重复的构造和析构,节省资源开销。

2.单例模式分为饿汉式和懒汉式两种。饿汉式是线程安全的,不用加锁。懒汉式不是线程安全的,要加锁。

3.C++实现饿汉式(线程安全,不加锁)

/////////////////////饿汉式/////////////////////#include<iostream>usingnamespacestd;classPerson{public:staticPerson*getPerson(){staticPerson person;return&person;}private:// 私有构造:防止类外直接实例化Person(){cout<<"person..."<<endl;}};intmain(){Person*p1=Person::getPerson();Person*p2=Person::getPerson();// 以下四个内存地址都相同,说明这些对象是唯一的实例,也就是单例cout<<"p1::"<<p1<<endl;cout<<"p2::"<<p2<<endl;printf("p1::%p\n",p1);printf("p2::%p\n",p2);getchar();return0;}

4.C++实现懒汉式(线程不安全,要加锁)

///////////////////// 线程安全 懒汉式 /////////////////////#include<iostream>#include<mutex>// 加锁必须的头文件usingnamespacestd;classPerson{public:// 懒汉式 + 双重检查锁定 + 加锁(线程安全)staticPerson*getPerson(){// 第一次检查:不加锁,提高效率(不为空就不进代码块)if(!instance){// 加锁:保证同时只有一个线程能进入lock_guard<mutex>lock(mtx);// 第二次检查:防止多线程重复创建if(!instance){instance=newPerson();}}returninstance;}private:// 私有构造Person(){cout<<"person..."<<endl;}// 静态成员变量staticPerson*instance;staticmutex mtx;// 锁 也必须是静态的(1.static函数只能用static成员,2.单例全局唯一,锁也必须全局唯一)};// 类外初始化静态变量Person*Person::instance=nullptr;mutex Person::mtx;intmain(){Person*p1=Person::getPerson();Person*p2=Person::getPerson();cout<<"p1::"<<p1<<endl;cout<<"p2::"<<p2<<endl;printf("p1::%p\n",p1);printf("p2::%p\n",p2);getchar();return0;}
http://www.jsqmd.com/news/594745/

相关文章:

  • Pixel Aurora Engine部署教程:Kubernetes集群中像素工作站弹性扩缩实践
  • 别再折腾了!Windows 10/11下用VS2017编译ZMQ 4.3.2的完整避坑指南(附常见错误修复)
  • 2025_NIPS_JavisGPT: A Unified Multi-modal LLM for Sounding-Video Comprehension and Generation
  • Java程序设计(第3版)第二章——变量的三种定义方式2和3
  • 豆包 Tomcat 9 → Tomcat 10 完整迁移指南(一步到位)
  • OpenClaw+Qwen3-4B旅行规划:自动生成行程与预订建议
  • 短短几天GitHub 30万Star!2026年必玩的开源AI网关OpenClaw保姆级部署教程
  • MySQL后端开发核心知识点
  • 半导体行业展会推荐怎么选?半导体展会全产业链盛会甄选 - 品牌2026
  • 别再只调RGB了!用HSV给你的WS2812灯带调出更自然的彩虹渐变(附Arduino代码)
  • 一篇顶一万篇,很难找到代码这么全的高分文章,WGS、RNA-seq、scRNA-seq、免疫肽组质谱联合分析
  • 从“单模型黑箱”到“多智能体博弈”:PediaMind 架构选型与核心优势解析
  • 科研党福音:OpenClaw+千问3.5-27B自动整理参考文献
  • STM8S001单片机:8引脚高性价比嵌入式开发方案
  • 在kali上创建DVWA靶机实验
  • 高效制作IO通道测试表:从位号表到VLOOKUP函数实战
  • 作品被篡改署名?三步维权指南
  • 全栈开发者工具链:OpenClaw+Qwen3.5-9B-AWQ-4bit辅助前端调试
  • OpenClaw隐私保护方案:Qwen3.5-9B本地化替代云端AI服务
  • 你的ESP32项目还缺个BGM?手把手教你做个可切换歌单的迷你音乐播放器
  • 蓝桥杯一周突破---day1【贪心】
  • 解构 Claude Code 的“上下文经济学”
  • 手把手用Multisim仿真BJT三种工作模式:从截止区到饱和区的实战观察
  • OpenClaw多模型协作方案:Qwen2.5-VL-7B与纯文本模型任务分工实践
  • RK3588上跑通YOLOv5实时检测:从摄像头编号获取到Python脚本调试的全流程实录
  • Python高效处理字符串去重的5种实用技巧
  • 如何分析AWR中的SGA建议_Buffer Cache Advisory与内存扩容指导
  • 房产线上获客平台究竟有多牛?
  • OpenClaw配置备份:千问3.5-9B环境快速迁移方案
  • Java学习笔记_Day21(Set)