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

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

单例模式的学习笔记
单例模式是为了:在整个系统生命周期内,保证一个类只能产生一个实例,确保该类的唯一性
参见链接1,链接2

#include <iostream>
#include <mutex>using namespace std;/*懒汉模式:只有在用到了才实例化对象并返回(调用了对外的接口才会实例对象)*/
/*构造函数私有化,只对外提供一个接口*//*线程不安全*/
class singleClass {
public:static singleClass* getInstance() // 对外接口,静态成员函数调用静态成员变量{if (m_instance == nullptr)  // 在多线程的环境下,在判空的时候可能存在多个线程同时进入if中,此时可能会实例化多个对象{m_instance = new singleClass();}return m_instance;}private:static singleClass* m_instance;  // 静态成员变量,类内声明,类外初始化singleClass() {}    // 构造函数属性设置为私有singleClass (const singleClass & sc) {}  // 拷贝构造函数也设置为私有
};singleClass* singleClass::m_instance = nullptr;   // 初始化静态变量/*线程安全*/
class threadSingleClass
{
public:static threadSingleClass* getInstance(){if (m_instance == nullptr)   // 先判断是否为空,为空就进入;不为空,说明已经存在实例,返回{//m_mutex.lock();   // 这里如果使用unique_lock就不需要在下面解锁unique_lock<mutex> lock(m_mutex);if (m_instance == nullptr)   // 再次判断,确保不会因为加锁期间多个线程同时进入{m_instance = new threadSingleClass();}//m_mutex.unlock();}return m_instance;}private:static threadSingleClass* m_instance;static mutex m_mutex;threadSingleClass() {};threadSingleClass(const threadSingleClass& sc) {}
};threadSingleClass* threadSingleClass::m_instance = nullptr;
mutex threadSingleClass::m_mutex;/*饿汉模式:不管调不调用对外接口,都已经实例化对象了。本身就是线程安全的*/
/*类在加载的时候就实力化对象,所以要提前占用系统资源*/
class hungrySingleClass
{
public:static hungrySingleClass* getInstance(){return m_instance;}private:static hungrySingleClass* m_instance;hungrySingleClass() {}hungrySingleClass(const hungrySingleClass* sc) {}  // 拷贝构造私有
};hungrySingleClass* hungrySingleClass::m_instance = new hungrySingleClass();
// 类外定义,main开始执行前,该对象就存在了int main()
{singleClass* singlep1 = singleClass::getInstance();singleClass* singlep2 = singleClass::getInstance();cout << singlep1 << endl;cout << singlep2 << endl;threadSingleClass* thsinglep1 = threadSingleClass::getInstance();threadSingleClass* thsinglep2 = threadSingleClass::getInstance();cout << thsinglep1 << endl;cout << thsinglep2 << endl;hungrySingleClass* hgsinglep1 = hungrySingleClass::getInstance();hungrySingleClass* hgsinglep2 = hungrySingleClass::getInstance();cout << hgsinglep1 << endl;cout << hgsinglep2 << endl;system("pause");return 0;
}

相关文章:

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

单例模式的学习笔记 单例模式是为了&#xff1a;在整个系统生命周期内&#xff0c;保证一个类只能产生一个实例&#xff0c;确保该类的唯一性 参见链接1&#xff0c;链接2 #include <iostream> #include <mutex>using namespace std;/*懒汉模式&#xff1a;只有在…...

数据驱动未来:构建下一代湖仓一体电商数据分析平台,引领实时商业智能革命

1.1 项目背景 本项目是一个创新的湖仓一体实时电商数据分析平台&#xff0c;旨在为电商平台提供深度的数据洞察和业务分析。技术层面&#xff0c;项目涵盖了从基础架构搭建到大数据技术组件的集成&#xff0c;采用了湖仓一体的设计理念&#xff0c;实现了数据仓库与数据湖的有…...

学习JavaScript第五天

文章目录 1.HTML DOM1.1 表单相关元素① form 元素② 文本输入框类和文本域&#xff08;input 和 textarea&#xff09;③ select 元素 1.2 表格相关元素① table 元素② tableRow 元素&#xff08;tr 元素&#xff09;③ tableCell 元素 &#xff08;td 或 th&#xff09; 1.3…...

pythonGame-实现简单的坦克大战

通过python简单复现坦克大战游戏。 使用到的库函数&#xff1a; import turtle import math import random import time 游戏源码&#xff1a; import turtle import math import random import time# 设置屏幕 screen turtle.Screen() screen.setup(800, 600) screen.tit…...

不太常见的asmnet诊断

asm侦听 [griddb1-[ASM1]-/home/grid]$ srvctl config asm ASM home: <CRS home> Password file: OCR/orapwASM Backup of Password file: OCRDG/orapwASM_backup ASM listener: LISTENER ASM instance count: 3 Cluster ASM listener: ASMNET1LSNR_ASM[rootdb1:/root]# …...

双指针-【3,4,5,6,7,8】

第三题&#xff1a;快乐数 . - 力扣&#xff08;LeetCode&#xff09;. - 备战技术面试&#xff1f;力扣提供海量技术面试资源&#xff0c;帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/happy-number/算法思想&#xff1a; 1.每个…...

react Vant中如何获取步进器的值

在React中使用Vant&#xff08;一个轻量、可靠的移动端Vue组件库&#xff0c;虽然原生是为Vue设计的&#xff0c;但如果你在使用的是React版本的Vant&#xff0c;比如通过某些库或框架桥接Vue组件到React&#xff0c;或者是一个类似命名的React UI库&#xff09;&#xff0c;获…...

Windows下Git Bash乱码问题解决

Windows下Git Bash乱码问题解决 缘起 个人用的电脑是Mac OS&#xff0c;系统和终端编码都是UTF-8&#xff0c;但公司给配发的电脑是Windows&#xff0c;装上Git Bash在使用 git commit -m "中文"时会乱码 解决 确认有以下配置 # 输入 git config --global --lis…...

HTML5 + CSS3

HTML 基础 准备开发环境 1.vscode 使用 新建文件夹 ---> 左键拖入 vscode 中 2.安装插件 扩展 → 搜索插件 → 安装打开网页插件&#xff1a;open in browser汉化菜单插件&#xff1a;Chinese 3.缩放代码字号 放大,缩小&#xff1a;Ctrl 加号&#xff0c;减号 4.设…...

NFTScan | 07.22~07.28 NFT 市场热点汇总

欢迎来到由 NFT 基础设施 NFTScan 出品的 NFT 生态热点事件每周汇总。 周期&#xff1a;2024.07.22~ 2024.07.28 NFT Hot News 01/ 数据&#xff1a;NFT 系列 Liberty Cats 地板价突破 70000 MATIC 7 月 22 日&#xff0c;据 Magic Eden 数据&#xff0c;NFT 系列 Liberty C…...

24年第三届钉钉杯大学生大数据挑战赛

...

探索分布式光伏运维系统的组成 需要几步呢?

前言 随着光伏发电的不断发展&#xff0c;对于光伏发电监控系统的需求也日益迫切&#xff0c;“互联网”时代&#xff0c;“互联网”的理念已经转化为科技生产的动力&#xff0c;促进了产业的升级发展&#xff0c;本文结合“互联网”技术提出了一种针对分散光伏发电站运行数据…...

做知识付费项目还能做吗?知识付费副业项目如何做?能挣多少钱?

hello,我是阿磊&#xff0c;一个20年的码农&#xff0c;6年前代码写不动了&#xff0c;转型专职做副业项目研究&#xff0c;为劳苦大众深度挖掘互联网副业项目&#xff0c;共同富裕。 现在做知识付费项目还能做吗&#xff1f; 互联网虚拟资源项目我一直在做&#xff0c;做了有…...

K210视觉识别模块学习笔记7:多线程多模型编程识别

今日开始学习K210视觉识别模块: 图形化操作函数 亚博智能 K210视觉识别模块...... 固件库: canmv_yahboom_v2.1.1.bin 训练网站: 嘉楠开发者社区 今日学习使用多线程、多模型来识别各种物体 这里先提前说一下本文这次测试实验的结果吧&#xff1a;结果是不太成…...

Go语言教程(一看就会)

全篇文章 7000 字左右&#xff0c; 建议阅读时长 1h 以上。 Go语言是一门开源的编程语言&#xff0c;目的在于降低构建简单、可靠、高效软件的门槛。Go平衡了底层系统语言的能力&#xff0c;以及在现代语言中所见到的高级特性。它是快速的、静态类型编译语言。 第一个GO程序…...

【Golang 面试 - 基础题】每日 5 题(十)

✍个人博客&#xff1a;Pandaconda-CSDN博客 &#x1f4e3;专栏地址&#xff1a;http://t.csdnimg.cn/UWz06 &#x1f4da;专栏简介&#xff1a;在这个专栏中&#xff0c;我将会分享 Golang 面试中常见的面试题给大家~ ❤️如果有收获的话&#xff0c;欢迎点赞&#x1f44d;收藏…...

OD C卷 - 密码输入检测

密码输入检测 &#xff08;100&#xff09; 给定一个密码&#xff0c;‘<’ 表示删除前一个字符&#xff0c;输出最终得到的密码&#xff0c;并判断是否满足密码安全要求&#xff1a; 密码长度>8;至少包含一个大写字母&#xff1b;至少包含一个小写字母&#xff1b;至少…...

【每日一题】【逆推法 + 贪心】【数学】造数 河南萌新联赛2024第(一)场:河南农业大学 A题 C++

河南萌新联赛2024第&#xff08;一&#xff09;场&#xff1a;河南农业大学 A题 造数 题目描述 样例 #1 样例输入 #1 2样例输出 #1 1样例 #2 样例输入 #2 5样例输出 #2 3做题思路 本题可以用逆推法 将三种操作反过来变为 − 1 , − 2 , / 2 -1 , -2 , /2 −1,−2,/2 …...

刷题计划 day4 【双指针、快慢指针、环形链表】链表下

⚡刷题计划day4继续&#xff0c;可以点个免费的赞哦~ 下一期将会开启哈希表刷题专题&#xff0c;往期可看专栏&#xff0c;关注不迷路&#xff0c; 您的支持是我的最大动力&#x1f339;~ 目录 ⚡刷题计划day4继续&#xff0c;可以点个免费的赞哦~ 下一期将会开启哈希表刷题…...

最高200万!苏州成都杭州的这些AI政策补贴,你拿到了吗?

随着全球人工智能技术的迅猛发展&#xff0c;地方政府纷纷出台相关政策以抢占未来科技的制高点。苏州 成都 杭州这三个城市更是推出了一系列AI政策补贴&#xff0c;旨在通过多方面支持&#xff0c;推动本地AI产业的发展。本文将带你了解目前不完全统计到的苏州 成都 杭州三地AI…...

深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录

ASP.NET Core 是一个跨平台的开源框架&#xff0c;用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录&#xff0c;以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...

3.3.1_1 检错编码(奇偶校验码)

从这节课开始&#xff0c;我们会探讨数据链路层的差错控制功能&#xff0c;差错控制功能的主要目标是要发现并且解决一个帧内部的位错误&#xff0c;我们需要使用特殊的编码技术去发现帧内部的位错误&#xff0c;当我们发现位错误之后&#xff0c;通常来说有两种解决方案。第一…...

线程与协程

1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指&#xff1a;像函数调用/返回一样轻量地完成任务切换。 举例说明&#xff1a; 当你在程序中写一个函数调用&#xff1a; funcA() 然后 funcA 执行完后返回&…...

智能在线客服平台:数字化时代企业连接用户的 AI 中枢

随着互联网技术的飞速发展&#xff0c;消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁&#xff0c;不仅优化了客户体验&#xff0c;还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用&#xff0c;并…...

leetcodeSQL解题:3564. 季节性销售分析

leetcodeSQL解题&#xff1a;3564. 季节性销售分析 题目&#xff1a; 表&#xff1a;sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...

企业如何增强终端安全?

在数字化转型加速的今天&#xff0c;企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机&#xff0c;到工厂里的物联网设备、智能传感器&#xff0c;这些终端构成了企业与外部世界连接的 “神经末梢”。然而&#xff0c;随着远程办公的常态化和设备接入的爆炸式…...

Netty从入门到进阶(二)

二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架&#xff0c;用于…...

深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用

文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么&#xff1f;1.1.2 感知机的工作原理 1.2 感知机的简单应用&#xff1a;基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...

LLMs 系列实操科普(1)

写在前面&#xff1a; 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容&#xff0c;原视频时长 ~130 分钟&#xff0c;以实操演示主流的一些 LLMs 的使用&#xff0c;由于涉及到实操&#xff0c;实际上并不适合以文字整理&#xff0c;但还是决定尽量整理一份笔…...

MySQL 8.0 事务全面讲解

以下是一个结合两次回答的 MySQL 8.0 事务全面讲解&#xff0c;涵盖了事务的核心概念、操作示例、失败回滚、隔离级别、事务性 DDL 和 XA 事务等内容&#xff0c;并修正了查看隔离级别的命令。 MySQL 8.0 事务全面讲解 一、事务的核心概念&#xff08;ACID&#xff09; 事务是…...