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

设计模式1 ——单例模式

定义

在 C++ 里,单例模式是一种常用的设计模式,其目的是保证一个类仅存在一个实例,并且为该实例提供一个全局访问点。

实现

1 饿汉式
class Singleton {
private:static Singleton instance;Singleton() = default;~Singleton() = default;Singleton(const Singleton&) = delete;Singleton& operator=(const Singleton&) = delete;public:static Singleton& getInstance() {return instance;}
};// 在程序入口之前就完成实例的初始化
Singleton Singleton::instance;
  • 实例在首次使用时才会被创建(延迟初始化)。
  • 缺点是在多线程环境下不安全,可能会创建出多个实例

懒汉式

class Singleton {
private:static Singleton* instance;Singleton() = default;~Singleton() = default;Singleton(const Singleton&) = delete;Singleton& operator=(const Singleton&) = delete;public:static Singleton* getInstance() {if (instance == nullptr) {instance = new Singleton();}return instance;}
};Singleton* Singleton::instance = nullptr;
  • 实例在首次使用时才会被创建(延迟初始化)。
  • 缺点是在多线程环境下不安全,可能会创建出多个实例。

懒汉式汉式线程安全双锁

#include <mutex>class Singleton {
private:static Singleton* instance;static std::mutex mutex_;Singleton() = default;~Singleton() = default;Singleton(const Singleton&) = delete;Singleton& operator=(const Singleton&) = delete;public:static Singleton* getInstance() {if (instance == nullptr) {std::lock_guard<std::mutex> lock(mutex_);if (instance == nullptr) {instance = new Singleton();}}return instance;}
};Singleton* Singleton::instance = nullptr;
std::mutex Singleton::mutex_;
http://www.xdnf.cn/news/7850.html

相关文章:

  • 前后端的双精度浮点数精度不一致问题解决方案,自定义Spring的消息转换器处理JSON转换
  • LeetCode117_填充每个结点的下一个右侧结点指针Ⅱ
  • WPS深度适配鸿蒙电脑折叠形态,国产替代下的未来何在?
  • L53.【LeetCode题解】二分法习题集2
  • 关于收集 Android Telephony 网络信息的设计思考2
  • WinForms 应用中集成 OpenCvSharp 实现基础图像处理
  • 基于AI大语言模型的历史文献分析在气候与灾害重建中的技术-以海南岛千年台风序列重建为例
  • C++初阶-vector的模拟实现2
  • 前端(小程序)学习笔记(CLASS 1):组件
  • 强化学习入门:RL开发框架Gym简介
  • App 出海:全渠道营销如何通过性能监控与精准归因实现增长
  • 【209. 长度最小的子数组】
  • shell脚本之函数详细解释及运用
  • 【深度估计 Depth Estimation】数据集介绍
  • [Java实战]Spring Boot整合Seata:分布式事务一致性解决方案(三十一)
  • 云祺容灾备份系统公有云备份与恢复实操-华为云
  • 【机器学习】支持向量机(SVM)
  • Suricata 3规则介绍、以及使用
  • 亚马逊AWS跑不动了?
  • 港股IPO市场火爆 没有港卡如何参与港股打新?
  • 网络爬虫(Web Crawler)详解
  • 第九届电子信息技术与计算机工程国际学术会议(EITCE 2025)
  • 使用 OpenCV 实现哈哈镜效果:让图像“扭曲起来”!
  • Node.js Express 项目现代化打包部署全指南
  • 基于亚马逊云科技构建音视频直播审核方案
  • Redis应用--缓存
  • MyBatis简单使用
  • 2025年度消费新潜力白皮书470+份汇总解读|附PDF下载
  • BAGEL-7B-MoT论文速读:统一多模态预训练的新特性
  • JUC高并发编程