【带头学C++】----- 九、类和对象 ---- 9.10 C++设计模式之单例模式设计

❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️麻烦您点个关注,不迷路❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️

目 录

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

   举例说明:


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

看过我之前的文章的,简单讲解过C++/Qt的设计模式。简单回顾一下:
回看设计模式章节点这里icon-default.png?t=N7T8https://blog.csdn.net/Phofomy/article/details/131247977?spm=1001.2014.3001.5502

不想回看???我在下面放个截图,简单回顾一下吧~

        实际上Qt的设计模式和C++基本上相差无几,Qt就是C++的图形GUI库,其底层实现完全结合了C++的知识,可以直接使用C++进行混合编程,那看完了Qt的相关的设计模式介绍,那么我们接下来,主要学习的是C++中单例设计模式的一些基本概念和实现;

首先:C++单例设计模式是什么?

根据图中:单例模式是一个类只有一个实例,那c++呢?其实是大同小异的!

        C++ 单例设计模式是一种用于创建只能有一个实例的类的软件设计模式。它确保一个类只有一个实例,并提供了一个全局访问该实例的访问点。

        在单例模式中,类的构造函数必须是私有的,以防止在类的外部对其进行实例化。通过使用一个静态方法或静态成员函数来创建类的唯一实例,然后每次调用该方法时返回相同的实例。

   举例说明:

class Singleton {
private:// 私有化构造函数,以防止在类的外部实例化该类Singleton() {}public:// 获取单例实例的静态成员函数static Singleton& getInstance() {// 使用静态局部变量确保只有一个实例被创建static Singleton instance;return instance;}
};

        C++单例设计模式实际上在开发过程中,也是比较常用的设计模式之一。使用单例模式,可以保证在整个程序执行期间只有一个类的实例存在,从而确保全局共享和唯一性。这在需要创建唯一资源或共享状态的情况下非常有用,例如数据库连接、日志记录器或全局配置对象等。

        单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案;

案例: 实现一个单例模式

代码:

#include <iostream>using namespace std;
class Singleton{ //单例模式
private://构造私有化 防止实例化其他对象 将构造函数私有化,外界无法构造函数Singleton(){count=0;cout<<"构造"<<endl;}Singleton(const Singleton &ob){count=0;}~Singleton(){cout<<"析够"<<endl;}
private://第二步:定义一个静态的指针变量保存唯一实例的地址//const防止p 在类内部 被修改指向static Singleton * const p;//保存唯一的实例地址int count;//统计任务执行次数
public://第三步: 获取唯一的实例地址static Singleton * getSingleton(void){return p;}//第四步:实现用户自定义的操作函数void printString(const char *str){cout << "打印:"<<str<<endl;}
};//这一步也很重要,初始化一个单例实例指针
Singleton * const Singleton::p = new Singleton;void test01(){Singleton *p1 = Singleton::getSingleton();p1->printString("离职证明p1_1");p1->printString("身份证明p1_2");p1->printString("学历证明p1_3");Singleton *p2 = Singleton::getSingleton();p2->printString("离职证明p2_1");//按住alt鼠标下拉可以同时修改一列p2->printString("身份证明p2_2");p2->printString("学历证明p2_3");
}
int main()
{test01();return 0;
}

        注意:在多线程环境下,需要考虑线程安全性,并采取适当的线程安全措施来保护单例实例的创建和访问。

代码:

class Singletons {
private:// 将构造函数和拷贝构造函数设为私有,以防止在类的外部实例化该类或进行拷贝构造Singletons() {}Singletons(const Singletons&) {}static Singletons* instance; // 单例实例的指针public:// 获取单例实例的静态成员函数static Singletons& getInstance() {// 使用双重检查锁定确保线程安全if (instance == nullptr) {// 加锁// ...if (instance == nullptr) {instance = new Singletons();}// 解锁// ...}return *instance;}void printMessage() {std::cout << "Hello, Singleton!" << std::endl;}
};Singletons* Singletons::instance = nullptr; // 初始化单例实例指针为空void test02() {Singletons& singleton = Singletons::getInstance(); // 获取单例实例singleton.printMessage(); // 调用打印方法
}

以上,就是我们对C++的单例设计模式一个学习内容,看完的小伙伴记得去敲一遍代码试试哦。

点赞👍  + 收藏👐 + 关注👌

❤️您的支持❤️,是博主最大的动力❤️!!互相学习❤️!!共同进步❤️!!一起搞钱❤️!!❤️

 ❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/206858.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

遥测终端机RTU:实现远程监测和控制的重要工具

遥测终端机RTU对设备进行远程监测和控制&#xff0c;支持采集和传输数据&#xff0c;以实现对工业过程、公用事业、水文和环境的监测和管理。 遥测终端机RTU工作原理 计讯物联遥测终端机RTU通过网口、串口进行传感器/设备等现场数据采集&#xff0c;将其转换为数字信号&#xf…

高校网站建设的效果如何

高校有较高的信息承载需求、招生宣传、学校内容呈现、内部消息触达等需求&#xff0c;对高校来说&#xff0c;如今互联网深入生活各个场景&#xff0c;无论学校发展、外部拓展还是内部师生互动、通知触达等都需要完善。 除了传统传单及第三方平台展示外&#xff0c;学校构建属…

Html5响应式全开源网站建站源码系统 附带完整的搭建教程

Html5响应式全开源网站建站源码系统是基于Html5、CSS3和JavaScript等技术开发的全开源网站建站系统。它旨在为初学者和小型企业提供一套快速、简便的网站建设解决方案。该系统采用响应式设计&#xff0c;可以自适应不同设备的屏幕大小&#xff0c;提高用户体验。同时&#xff0…

Clean My Mac X2024解锁完整版本

Clean My Mac X是Mac上一款美观易用的系统优化清理工具&#xff0c;也是小编刚开始用Mac时的装机必备。垃圾需要时时清&#xff0c;电脑才能常年新。Windows的垃圾清理工具选择有很多&#xff0c;但是Mac的清理工具可选择的就很少。 今天给大家推荐大名鼎鼎的Clean My Mac X&a…

elasticsearch-head 启动教程

D:\elasticsearch-head-master>grunt server ‘grunt’ 不是内部或外部命令&#xff0c;也不是可运行的程序 或批处理文件。 npm install -g grunt-clinpm install

Leetcode—190.颠倒二进制位【简单】

2023每日刷题&#xff08;五十二&#xff09; Leetcode—190.颠倒二进制位 算法思路 实现代码 class Solution { public:uint32_t reverseBits(uint32_t n) {uint32_t res 0;for(int i 0; i < 32 && n > 0; i) {res | (n & 1) << (31 - i);n >&…

第二十一章,网络通信

网络协议 IP协议 IP是Internet Protocol的简称&#xff0c;是一种网络协议。Internet 网络采用的协议是TCP/IP协议&#xff0c;其全称是Transmission Control Protocol/Internet Protocol。Internet 依靠TCP/IP协议&#xff0c;在全球范围内实现了不同硬件结构、不同操作系统…

机器学习实战:预测波士顿房价

前言&#xff1a; Hello大家好&#xff0c;我是Dream。 今天来学习一下机器学习中一个非常经典的案例&#xff1a;预测波士顿房价&#xff0c;在此过程中也会补充很多重要的知识点&#xff0c;欢迎大家一起前来探讨学习~ 一、导入数据 在这个项目中&#xff0c;我们利用马萨诸…

element el-pagination solt 使用

起初只是想修改一下&#xff0c;共多少条的颜色&#xff0c;和跳转至 发现并不支持 网上找通过js修改&#xff0c;因为我这是在 dialog里面的 好像并不能适用 mounted() {document.getElementsByClassName("el-pagination__jump")[0].childNodes[0].nodeValue &quo…

企业集团采购系统(供应商、询价、招投标)-源码

一、业务需求 企业招标询价供应商管理系统是一种专业的采购管理系统&#xff0c;旨在帮助企业实现供应商关系的管理和采购成本的控制。该系统涵盖了企业采购管理的各个方面&#xff0c;包括采购预算、供应商管理、产品管理、采购计划、询价、竞价、招标、采购订单、采购合同执…

Python零基础入门之详解sort排序使用

文章目录 1.前言2.环境准备3.程序实现4.sort拓展关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Python学习书籍四、Python工具包项目源码合集①Python工具包②Python实战案例③Python小游戏源码五、面试资料六、Python兼职渠道 1.前言 昨天一…

低代码平台选型标准:功能、应用与优劣势分析

在数字化转型的浪潮下&#xff0c;中小企业面临满足市场需求、提高效率和竞争力的挑战。低代码平台做为数字化转型的重要工具&#xff0c;为中小企业带来了快速开发和定制应用程序解决方案。但是&#xff0c;在很多低代码平台中&#xff0c;选择是一个重要的环节。企业应该根据…

Linux学习教程(第十一章 Linux高级文件系统管理)二

第十一章 Linux高级文件系统管理&#xff08;二&#xff09; 九、Linux如何判断磁盘配额是否生效&#xff1f; 我们的磁盘配额已经生效&#xff0c;接下来测试一下是否会限制我们的用户。以 lamp1 用户为例&#xff0c; 因为 lamp1 用户除容量被限制外&#xff0c;也限制了文…

如何选择靠谱的软件测试外包公司?CMA、CNAS软件测试报告获取

作为信息科技产业的代表之一&#xff0c;软件公司受到了越来越多的关注&#xff0c;它们的发展为我国的科技创新提供了强大的战略支撑。软件测试作为提升软件产品质量的后盾&#xff0c;日益成为一个专业化、标准化和规范化的行业&#xff0c;软件测试外包公司就是这种背景下成…

软件开发全过程必备文档下载(@附所有文档)

在软件开发的全过程中&#xff0c;编写文档是一项至关重要的任务。良好的文档记录不仅可以提高开发效率&#xff0c;减少错误&#xff0c;还可以为后续维护和扩展提供可靠的依据。下面我们将探讨软件开发全过程中必备的几种文档。 1.需求文档 需求文档是软件开发项目的起点&a…

flutter添加全局水印

效果&#xff1a; 可以直接引用&#xff1a;disable_screenshots: ^0.2.0 但是有时候直接引用会报错&#xff0c;可以不引用插件直接把下面的源码工具类放在项目里面 工具类源码&#xff1a; import dart:io; import dart:math;import package:flutter/cupertino.dart; impor…

FastAPI请求体-多个参数

路径参数、查询参数&#xff0c;和请求体混合 首先&#xff0c;我们需要导入所需的库。我们将使用FastAPI、Path和Annotated来处理路由和参数&#xff0c;并使用BaseModel和Union来自定义数据模型。 完整示例代码 from typing import Annotated, Unionfrom fastapi import F…

剪切板管理 Paste中文 for Mac

Paste是一个方便的剪贴板管理工具&#xff0c;它可以帮助你更好地组织、查找和管理剪贴板中的内容。它提供了历史记录、搜索、组织、格式处理和云同步等功能&#xff0c;使你能够更高效地使用剪贴板&#xff0c;并节省时间和精力。无论是在个人使用还是团队协作中&#xff0c;P…

linux云服务器开启防火墙注意事件

重要的事情先说三遍: linux云服务器开启防火墙要先获取到云服务器的管理界面控制权!! linux云服务器开启防火墙要先获取到云服务器的管理界面控制权!! linux云服务器开启防火墙要先获取到云服务器的管理界面控制权!! 也就是能打开这个页面: 为什么这么说呢?如果你…