news 2026/4/16 7:48:16

C++之单例模式

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C++之单例模式

文章目录

  • 饿汉式
  • 懒汉式
  • 单例模式(Singleton Pattern,也称为单件模式),使用最广泛的设计模式之一。其意图是保证一个类仅有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享
  • 面向对象编程中,每个对象都应该抽象代表一个设备,并通过对象完成对某个具体设备的管理和维护
  • 对于有些类只能有一个实例很重要,例如打印机管理器、设备管理器、任务管理器等
  • 实现单例模式的三个主要步骤:
    • 私有化构造函数
    • 使用静态成员变量维护唯一的单例对象
    • 定义静态成员函数用于获取单例对象
  • 私有化构造函数
classSingleton{private:Singleton(void){...}Singleton(constSignleton&that){}...};
  • 使用静态成员变量维护唯一的单例对象
classSingleton{private:Singleton(void){...}Singleton(constSignleton&that){}...staticSingleton s_instance;};Singleton Singleton::s_instance;
  • 定义静态成员函数用于获取单例对象
classSingleton{private:Singleton(void){...}Singleton(constSignleton&that){}...staticSingleton s_instance;public:staticSingleton&getInstance(void){returns_instance;}};Singleton Singleton::s_instance;

饿汉式

  • 加载进程时即完成创建(饿), 用不用都创建
#include<iostream>usingnamespacestd;classSignleton{private:intm_i;Signleton(inti=0){m_i=i;}Signleton(constSignleton&that){}staticSignleton m_instance;public:staticSignleton&getInstance(){returnm_instance;}voidprint(){cout<<m_i<<endl;}};Signleton Signleton::m_instance=111;intmain(void){Signleton&s1=Signleton::getInstance();Signleton&s2=Signleton::getInstance();Signleton&s3=Signleton::getInstance();//Signleton s4 = 12; //errorcout<<&s1<<endl;cout<<&s2<<endl;s1.print();s2.print();return0;}

懒汉式

  • 用时再创建(懒),不用再销毁
#include<iostream>usingnamespacestd;classSignleton{private:intm_i;staticintm_count;//记录对象的引用次数staticSignleton*m_instance;Signleton(inti=0){m_i=i;cout<<"constructor "<<endl;}Signleton(constSignleton&that){}public:staticSignleton&getInstance(void){if(m_instance==NULL){m_instance=newSignleton(123);}m_count++;return*m_instance;}voidrelease(){m_count--;if(m_count==0){deletem_instance;m_instance=NULL;}}~Signleton(){}};Signleton*Signleton::m_instance=NULL;intSignleton::m_count=0;intmain(void){//Signleton s1; //errorSignleton&s1=Signleton::getInstance();Signleton&s2=Signleton::getInstance();Signleton&s3=Signleton::getInstance();cout<<&s1<<" "<<&s2<<" "<<&s3<<endl;// 三个引用地址相同s1.release();s2.release();s3.release();return0;}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/11 13:47:25

RAG大模型智能客服:从架构设计到生产环境部署的实战指南

背景痛点&#xff1a;传统客服的“老毛病” 做ToB客服的同学都懂&#xff0c;最怕的不是用户问题多&#xff0c;而是“知识库又过期了”。 规则引擎&#xff1a;写一条规则要三天&#xff0c;用户换种问法就“404”&#xff1b;纯生成式LLM&#xff1a;满嘴跑火车&#xff0c…

作者头像 李华
网站建设 2026/4/16 1:20:34

基于CompVis SVD基础模型的图生视频效率优化实战

基于CompVis SVD基础模型的图生视频效率优化实战 摘要&#xff1a;本文针对CompVis SVD基础模型在图像生成视频任务中的计算效率瓶颈&#xff0c;提出一套完整的优化方案。通过模型量化、显存优化和流水线并行等技术&#xff0c;在保证生成质量的前提下显著提升推理速度。读者将…

作者头像 李华
网站建设 2026/4/15 22:31:50

ChatTTS中文整合包实战:从零构建高效语音合成流水线

背景痛点&#xff1a;中文TTS的三座大山 做中文语音合成最怕什么&#xff1f; 模型太多&#xff1a;声学模型、声码器、韵律预测器各自为政&#xff0c;一个服务里塞三四个权重文件&#xff0c;显存直接飙到8 GB。流式卡顿&#xff1a;FastSpeech2HiFi-GAN的经典组合&#xf…

作者头像 李华
网站建设 2026/4/11 18:40:59

Docker日志集中管理避坑指南(27日闭环实践):从driver选型、缓冲区溢出到时序错乱的17个致命陷阱

第一章&#xff1a;Docker日志集中管理的27日闭环实践全景图 在生产环境中&#xff0c;Docker容器日志分散、生命周期短、格式不统一&#xff0c;极易导致故障定位滞后与审计失效。我们以27天为一个完整实践周期&#xff0c;构建从日志采集、传输、存储、分析到告警反馈的端到端…

作者头像 李华
网站建设 2026/4/12 1:09:34

【车规级容器可靠性白皮书首发】:基于ISO 26262 ASIL-D要求的Docker 27启动延迟、内存泄漏、热插拔容错三重加固指南

第一章&#xff1a;车规级容器可靠性白皮书发布背景与ASIL-D合规总览 随着智能驾驶系统向L3高阶演进&#xff0c;车载计算平台对软件部署的确定性、故障隔离能力及全生命周期可靠性提出前所未有的严苛要求。传统通用型容器运行时&#xff08;如Docker Engine&#xff09;缺乏实…

作者头像 李华