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

c++中单例模式的实现和问题

单例模式定义

单例模式是一种创建型设计模式,它确保一个类只有一个实例,并提供了一个全局访问点来访问该实例。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。

代码:

class Singleton {
public:static Singleton& getInstance(){static Singleton instance;return instance;}
private:Singleton ()= default;~Singleton ()= default;Singleton (const Singleton &)= delete;Singleton & operator=(const Singleton &)= delete;
};

问题:

单例模式其实就是一个复杂的全局对象,并不会因为使用了设计模式而消去全局变量的种种弊端,例如无法复用、线程安全等问题
可测试性
你无法孤立地测试你的实体。如果单元不存在,那么单元测试也将不存在。你只能进行系统测试。实体的执行效果要依赖整个系统的状态。重构
因为你无法孤立地对代码进行推理,重构它会相当有挑战。
优化
你无法轻易地重新安排函数的调用或者在不同的线程上进行函数调用,因为可能有隐藏的依赖。缓存之前的函数调用结果也极为危险。并发产生数据竞争的必要条件是有共享而可变的状态,而非const全局变量正是共享而可变的。

一些单例需求的替代方案:

在C++中,不可变的全局对象可以考虑用const或者常量表达式。

思考:

  • 设计模式是一种策略,但是不同的语言有不同的特性,可能某些语言中并不需要单独编写单例类就可以实现单例模式。Java显然是需要单例模式的

参考链接:

https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Ri-singleton
https://www.zhihu.com/question/50533404

http://www.lryc.cn/news/188749.html

相关文章:

  • 如何选购高效便捷的软件行业项目管理系统
  • 用“和美”丈量中国丨走进酒博物馆系列⑨
  • 树莓派 Raspberry Pi 与YOLOv8 结合进行目标检测
  • centos 安装 percona-xtrabackup
  • 机器学习1:k 近邻算法
  • 知识图谱系列4:neo4j学习
  • Mainflux IoT:Go语言轻量级开源物联网平台,支持HTTP、MQTT、WebSocket、CoAP协议
  • 怎样提取视频中的音频?分享一个一学就会的方法~
  • 【数据结构】二叉树的基本概念
  • 数据可视化实战:如何给毛*易的歌曲做词云展示?
  • 智能文本纠错API的崭露头角:革命性的写作辅助工具
  • 读书笔记:多Transformer的双向编码器表示法(Bert)-3
  • jpsall脚本
  • Django REST framework API版本管理【通过GET参数传递】
  • 归并排序 nO(lgn)
  • 数据库Mysql三大引擎(InnoDB、MyISAM、 Memory)与逻辑架构
  • Python数据分析实战-实现Mann-Whitney U检验(附源码和实现效果)
  • 车载SBC芯片概论
  • 【ARM AMBA5 CHI 入门 12.1 -- CHI 链路层详细介绍 】
  • 【物联网】Arduino+ESP8266物联网开发(二):控制发光二极管 按钮开关控制开关灯
  • WPF向Avalonia迁移(二、一些可能使用到的库)
  • Mac navicat连接mysql出现1045 - Access denied for user ‘root‘
  • win10电脑插入耳机,右边耳机声音比左边小很多
  • 本文整理了Debian 11在国内的几个软件源。
  • 2023NOIP A层联测6 数点
  • Jmeter 链接MySQL测试
  • jwt的了解和使用以及大致代码分析
  • uniapp中videojs、renderjs的使用
  • AIGC AI绘画 Midjourney 参数大全详细列表
  • 安装hadoop,并配置hue