C++设计模式系列(一):单例模式

设计模式C++实现(4)——单例模式 软件领域中的设计模式为开发人员提供了一种使用专家设计经验的有效途径。设计模式中运用了面向对象编程语言的重要特性:封装、继承、多态,真正领悟设计模式的精髓是可能一个漫长的过程,需要大量实践经验的积累。最近看设计模式的书,对于每个模式,用C++写了个小例子,加深一下理解。单例模式 阅读详情
在GOF的《设计模式 可复用面向对象软件的基础》中一共讲解了23种设计模式,我们在各种代码和框架中或多或少的发现他们的影子,为了更好的掌握这些设计模式,我们将以C++代码的形式在博文中做一个总结。
一、单例模式
1.引言
单例模式是在各种设计模式中最基础的一个设计模式,因为只涉及到一个类,所以也是最简单的一个设计模式,单例模式的主要意图和动机是什么呢?我们可以看下《设计模式 可复用面向对象软件的基础》中是怎么说的:
2. 意图
保证一个类仅有一个实例,并提供一个访问它的全局访问点。
3. 动机
对一些类来说,只有一个实例是很重要的。虽然系统中可以有许多打印机,但却只应该
有一个打印假脱机( printer spooler),只应该有一个文件系统和一个窗口管理器。一个数字滤
波器只能有一个 A/D转换器。一个会计系统只能专用于一个公司。
    我们怎么样才能保证一个类只有一个实例并且这个实例易于被访问呢?一个全局变量使
得一个对象可以被访问,但它不能防止你实例化多个对象。
    一个更好的办法是,让类自身负责保存它的唯一实例。这个类可以保证没有其他实例可
以被创建(通过截取创建新对象的请求)    ,并且它可以提供一个访问该实例的方法。这就是
Singleton模式。
4.实现
这个类要保证没有其他实例可以被创建,则该类应该显示的定义构造函数,且构造函数为private或者protected;
提供一个访问该实例的方法,该实例必须唯一且能够被访问,该实例可以被声明为私有的静态成员,则应该提供一个公共的方法来访问该实例;
5.类图

根据以上阐述,可以画出该模式的类图为:


6.代码

我们可以得到实现单例模式的代码为:
#include <iostream>


class Singleton {
public:
	static Singleton* getInstance()
	{
		if (m_Instance == NULL)
		{
			m_Instance = new Singleton();
		}

		return m_Instance;
	}
	static void destroyInstance()
	{
		if (m_Instance != NULL)
		{
			delete m_Instance;
			m_Instance = NULL;
		}
	}
private:
	Singleton();
	static Singleton *m_Instance;
};

Singleton* Singleton::m_Instance = NULL;
int main(void)
{
	Singleton *sig = Singleton::getInstance();
	Singleton::destroyInstance();
	return 0;
}

7.总结
以上为根据单例模式的定义写的代码为最简单的形式,只为说明单例模式,但是在实际项目中,情况比较复杂,如考虑线程安全等等,以后遇到各种情况还会做相应的补充。

《C++设计模式》单例模式 介绍了C++的单例模式 阅读详情

相关推荐

C++:设计模式-单例模式

通过方法获取单例实例,这是调用饿汉式单例的标准方式。由于饿汉式实例在程序启动时就被创建,所以你不需要显式地进行实例化操作。饿汉式:简单,适合不需要延迟初始化的场景,程序启动时就创建实例。懒汉式:适合需要延迟初始化的场景,但需要考虑线程安全。线程安全懒汉式:通过加锁保证线程安全,但可能带来性能开销。双重检查锁:线程安全,减少了加锁的频率,但实现复杂。静态局部变量:线程安全,简洁,现代 C++ 中推荐的单例实现方式。在现代 C++ 中,静态局部变量。

己亥谷雨 2447

C++ 设计模式——单例模式

单例模式(Singleton Pattern)也称单件模式/单态模式,是一种创建型模式,用于创建只能产生一个对象实例的类。

慢慢记录,慢慢更新。 5038

C++设计模式系列文章汇总

Jungle整理的C++设计模式系列文章出炉了,每一种设计模式都包含: 理论知识:每一种模式的定义、解释 模式UML结构和角色分析:UML类图说明模式的角色和结构 模式应用实例:将设计模式应用于具体的例子,并给出UML实例类图 完整的源代码:完整的代码和运行结果示意图,源代码资源及UML图可在Git上下载 总结:每一种模式的特点和适用环境 设计模式准备工作 设计模式(一)——设计...

冯Jungle的个人博客 8526

设计模式C++实现19: 单例模式(Singleton)

设计模式C++实现19: 单例模式(Singleton)

394

设计模式EA类图并使用C++实现了19个设计模式

使用EA软件绘制相关设计模式的类图,并使用C++语言实现了对应的类图,并在centos6.7上完成了测试

常见设计模式的解析和实现(C++)共21种.UML类图+讲解

常见设计模式的解析和实现(C++)共21种.zip

创建型设计模式——单例模式

单例模式定义:确保一个类只有一个实例,而且自行实例化并向整个系统提供这个实例场景,也就是说:确保某个类有且只有一个对象的场景,避免产生多个对象消耗过多的资源,或者某种类型的对象应该有且只有一个。保证一个类仅有一个实例,并提供一个访问它的全局访问点。

庄小焱 1728

深入解析FastDDS:SHM与DATA-SHARING传输层的性能对比与实现细节

本文深入对比了FastDDS中SHM与DATA-SHARING两种传输层的实现机制与性能差异。SHM采用端口化共享内存模型,存在两次数据拷贝;而DATA-SHARING通过共享历史实现真正的零拷贝,大幅降低延迟与CPU占用。文章结合实战测试数据,为机器人、自动驾驶等高实时性场景提供了关键的性能优化选型与配置指南。

weixin_28358083的博客 231

【Singleton模式】C++设计模式——单例模式

C++单例模式,单件模式,Singleton模式,以简单明了的分析代码讲述单例模式,同时讲解了单例模式中安全锁的运用

不负AC不负卿的博客 1187

跨厂商网络设备的RADIUS认证:Windows NPS的兼容性与最佳实践

本文详细探讨了Windows NPS在多厂商网络环境中的RADIUS认证实践,特别针对华为、华三、思科等主流设备的兼容性问题提供解决方案。从基础配置到高级优化,涵盖VSA属性映射、认证协议选择及安全加固措施,帮助企业实现统一身份认证并提升网络安全性。

weixin_29213827的博客 421

激光雷达与相机时间戳同步:原理、触发方案与工程实现

目录一、引言:时间不同步,多传感器融合必出问题二、核心原理:相机成像机制与触发模式(同步的基础)2.1 相机成像的两个核心阶段:曝光与读出(1)非交叠曝光(2)交叠曝光2.2 相机触发模式:内触发 vs 外触发(1)内触发(2)外触发2.3 关键信号:Strobe信号与预输出(同步的核心技巧)三、三种主流时间戳同步方案(工程落地首选)3.1 方案一:统一硬触发(精度最高,高端场景首选)核心原理核心配置要点优缺点适用场景3.2 方案二:软触发+硬触发(Strobe预输出,车载量产首选)核心原理核心配置要点优缺

getusushu的博客 200

C++设计模式——单例模式

问题描述 现在,不管开发一个多大的系统(至少我现在的部门是这样的),都会带一个日志功能;在实际开发过程中,会专门有一个日志模块,负责写日志,由于在系统的任何地方,我们都有可能要调用日志模块中的函数,进行写日志。那么,如何构造一个日志模块的实例呢?难道,每次new一个日志模块实例,写完日志,再delete,不要告诉我你是这么干的。在C++中,可以构造一个日志模块的全局变量,那么在任何地方就都可以用

u010944926的专栏 1296

YOLO26涨点改进 | 检测头改进篇 | 利用ASFF改进YOLO26检测头,自适应空间特征融合模块,在所有的目标检测上均有大幅度的涨点效果

本文提出了一种自适应空间特征融合(ASFF)检测头YOLO26,用于解决目标检测中特征金字塔跨尺度特征不一致的问题。ASFF通过学习空间权重图,自适应地融合不同尺度的特征,抑制特征层间的冲突信息。实验表明,该方法在MSCOCO数据集上显著提升了检测精度(45FPS下AP达42.4%),且仅引入极小推理开销。ASFF模块具有可微分性、模型无关性和计算成本低等优势,能够有效改善特征尺度不变性,实现速度与精度的良好平衡。文章详细介绍了ASFF的原理、实现代码及其在YOLO模型中的集成方法。

Ai缝合怪、助力小伙伴高效发论文 551

C++设计模式 - 单例模式

知识的学习在于点滴记录,坚持不懈;知识的学习要有深度和广度,不能只流于表面,坐井观天;知识要善于总结,不仅能够理解,更知道如何表达! 设计模式概念 设计模式简单来说就是在解决某一类问题场景时,有既定的,优秀的代码框架可以直接使用,与我们自己摸索出来的问题解决之道相比较,有以下优点可取: 代码更易于维护,代码的可读性,复用性,可移植性,健壮性会更好 当软件原有需求有变更或者增加新的需求时,合理...

大秦坑王的专栏 4051

核磁共振常用的文件格式介绍:NIfTI volume 格式 (*.nii), GIFTI 格式 (*.gii), CIFTI 格式 (*.nii)

NIfTI volume 格式 (*.nii)GIFTI 格式 (*.gii)CIFTI 格式 (*.nii)Scene file文件 (*.scene)规格文件 (*.spec)解剖 (*.annot)一个场景文件包含一个或多个场景;每个场景实际上是保存时 wb_view 内部状态的快照。这包括有关加载哪些文件、如何显示、如何配置选项卡的信息(选择了哪些表面、在每个层中选择了哪些文件、打开了哪些层、哪些视图旋转、调色板设置、平铺选项卡等),以及在它们上面添加了哪些注释(文本、箭头、圆圈等)。

从事脑科学核磁共振方法学研究,在Nature communications等权威期刊发表研究论文,熟练掌握磁共振处理方法和统计学方法,欢迎大家和我交流。 3043

龙腾CMS downloadFile接口任意文件读取漏洞复现 [附POC]

大连网龙网络科技有限公司专注于在信息科技领域中向客户提供商业解决方案,是专业的互联网服务解决方案提供商和网络营销服务专家,为用户提供一体化的网络营销整体解决方案,龙腾CMS downloadFile接口存在任意文件读取漏洞。

薛定谔嘚喵博客 720

C++ 设计模式系列:单例模式

简单介绍一下单例模式

筏的博客 1063

AUTOSAR 导入DBC ISOLAR工程配置

ISOLAR工程配置-dbc导入

汽车电子电气 2407

C++设计模式之单例模式

本文系统探讨了C++中单例模式的实现演进,从基础到高级方案: 饿汉模式:程序启动即初始化,线程安全但可能浪费资源 懒汉模式:延迟初始化,原始版本存在线程安全问题 线程安全改进: 粗粒度加锁方案:简单但性能较差 双重检查锁定(DCLP):减少锁竞争但仍需谨慎实现 现代C++最佳方案:基于C++11的Meyers' Singleton,利用局部静态变量特性实现简洁高效的线程安全单例 每种方案都分析了其实现原理、线程安全性、优缺点及适用场景,为开发者选择合适方案提供参考。

不会C++、害怕嵌入式且不爱看动漫的小趴菜 1万+

基于STM32L4XX、HAL库的ESP32-S3-WROOM-1-N4 WIFI模块驱动程序设计

/ 检查是否收到完整的一行(以\r\n结尾)// 例如: 解析AT命令响应或MQTT消息等。// UART2初始化已在CubeMX中配置。// USART2初始化函数(由CubeMX生成)// 缓冲区溢出,重置。// 如果需要等待响应。// 处理接收到的数据。// 处理接收到的数据。// 等待ESP32模块启动。// 主循环其他任务。// 启用UART全局中断。// 发送HTTP GET请求。// 发送AT测试命令。// 连接Wi-Fi。// UART中断回调函数。

zhusl6688的博客 286

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

C++设计模式之:单例模式singleton

it人员无论是使用哪种高级语言开发东东,想要更高效有层次的开发程序的话都躲不开三件套:数据结构,算法和设计模式。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案,使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。设计模式坚持七大原则:开闭原则,单一职责原则,里氏替换原则,依赖倒转原则,接口隔离原则,迪米特原则,合成复用原则,而各项设计模式又区分为三大模式,创建型模式,结构型模式,行为模式。

weixin_45068267的博客 1859

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

C++面试宝典设计模式之单例模式

软件设计模式(Design pattern),又称设计模式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、程序的重用性。设计模式是面试热门考点,掌握设计模式可以让你深入理解面向对象思想,使设计方案更加灵活,方便后期维护修改。单例模式属于创建型模式,这种模式涉及到一种单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一对象的方式。单例类的特征: 1.单例类最多只能有一个实例。

wyhplus的博客 1133

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

C++设计模式系列(一)单例模式

C++单例模式

qq_26849933的博客 462

【C++设计模式】之单例模式,一文看懂

本文主要介绍设计模式中的单例设计模式。包括三种类型:懒汉模式,饿汉模式以及线程安全的懒汉模式。

weixin_61276540的博客 1709

【C++】特殊类的设计、单例模式以及Cpp类型转换

本文深入探讨C++中特殊类的设计方法与类型转换机制。针对特殊类设计,详细解析如何实现禁止拷贝、限制对象创建于堆/栈、防止继承及单例模式(饿汉与懒汉),并分析其应用场景与线程安全问题。在类型转换部分,系统介绍C++四种强制转换操作符(static_cast、reinterpret_cast、const_cast、dynamic_cast)的原理与适用场景,剖析隐式转换的潜在风险(如数据截断与死循环),并对比C风格转换的缺陷。通过实例代码与场景分析,帮助开发者掌握高效、安全的编程实践,提升代码健壮性与可维护性。

2303_77756141的博客 2235

[设计模式]C++单例模式的几种写法以及通用模板

本文详细介绍了C++单例模式从C++98到C++11的演进过程,对比分析了不同实现方式的优缺点。首先阐述了单例模式的核心价值:控制实例数量和提供全局访问点。然后重点讲解了四种实现方式:局部静态变量(C++11推荐)、饿汉式、懒汉式+双重检查锁定(存在缺陷)以及基于C++11 once_flag和智能指针的现代方案。最后展示了基于CRTP的通用单例模板这一企业级最佳实践,通过模板元编程实现代码复用。文章为开发者提供了从基础到高级的单例模式实现指南,特别强调了线程安全和内存管理的重要性。

qq_44846784的博客 5330
上一篇: c/c++内存对齐总结
下一篇: Linux下从原文件到可执行文件的过程
drlmemory
博客等级 码龄14年 15粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值