news 2026/2/27 8:51:56

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/2/24 14:42:44

AI 辅助下的商城开发毕业设计:从需求建模到代码生成的全流程实战

AI 辅助下的商城开发毕业设计&#xff1a;从需求建模到代码生成的全流程实战 毕业设计只剩 8 周&#xff0c;导师一句“功能要完整、代码要优雅、答辩要能打”&#xff0c;直接把难度拉满。 去年我还在手写 SQL、通宵调接口&#xff0c;今年直接让 AI 打主力&#xff0c;三周跑…

作者头像 李华
网站建设 2026/2/14 4:04:29

【2024唯一权威实测报告】:Docker 27中NetworkPolicy + Cilium v1.15 + Kubernetes 1.30协同策略验证(附12类攻击面拦截率对比数据)

第一章&#xff1a;Docker 27 网络策略精细化控制 Docker 27 引入了基于 eBPF 的原生网络策略增强机制&#xff0c;支持在容器网络层实现细粒度的入站/出站流量过滤、端口级限速与应用标签感知的策略匹配。该能力不再依赖第三方 CNI 插件&#xff0c;而是通过内置的 docker ne…

作者头像 李华
网站建设 2026/2/17 9:52:24

深入解析CANN架构下AIGC算子开发:从原理到Ascend C实战

CANN组织链接&#xff1a;https://atomgit.com/cann ops-nn仓库链接&#xff1a;https://atomgit.com/cann/ops-nn 在AIGC&#xff08;人工智能生成内容&#xff09;时代&#xff0c;算子作为AI计算的最小原子操作单元&#xff0c;其性能直接影响生成式模型的推理与训练效率。华…

作者头像 李华