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

C++单例模式的设计

单例模式(Singleton Pattern)是一种设计模式,用于确保一个类只有一个实例,并提供一个全局访问点来访问该实例。在C++中,单例模式通常用于管理全局资源或共享状态。

以下是C++中实现单例模式的几种常见方式:

  1. 懒汉式(Lazy Initialization)
    懒汉式单例在第一次使用时才创建实例。

非线程安全版本:

class Singleton {
public:static Singleton& getInstance() {if (!instance) {instance = new Singleton();}return *instance;}// 删除拷贝构造函数和赋值运算符Singleton(const Singleton&) = delete;Singleton& operator=(const Singleton&) = delete;private:Singleton() {}  // 私有构造函数~Singleton() {} // 私有析构函数static Singleton* instance; // 静态实例指针
};Singleton* Singleton::instance = nullptr; // 初始化静态成员

线程安全版本(使用双重检查锁定):

#include <mutex>class Singleton {
public:static Singleton& getInstance() {if (!instance) {std::lock_guard<std::mutex> lock(mutex);if (!instance) {instance = new Singleton();}}return *instance;}Singleton(const Singleton&) = delete;Singleton& operator=(const Singleton&) = delete;private:Singleton() {}~Singleton() {}static Singleton* instance;static std::mutex mutex;
};Singleton* Singleton::instance = nullptr;
std::mutex Singleton::mutex;
  1. 饿汉式(Eager Initialization)
    饿汉式单例在程序启动时即创建实例,线程安全。
class Singleton {
public:static Singleton& getInstance() {static Singleton instance; // 静态局部变量,程序启动时初始化return instance;}Singleton(const Singleton&) = delete;Singleton& operator=(const Singleton&) = delete;private:Singleton() {}~Singleton() {}
};
  1. Meyer’s Singleton(静态局部变量)
    这是C++中最简洁的单例实现方式,利用了静态局部变量的特性(线程安全且懒加载)。
class Singleton {
public:static Singleton& getInstance() {static Singleton instance; // 静态局部变量,线程安全且懒加载return instance;}Singleton(const Singleton&) = delete;Singleton& operator=(const Singleton&) = delete;private:Singleton() {}~Singleton() {}
};
http://www.lryc.cn/news/521887.html

相关文章:

  • 基于springboot的自习室预订系统
  • shell笔记
  • 《鸿蒙Next微内核:解锁人工智能决策树并行计算的加速密码》
  • AI刷题-最大矩形面积问题、小M的数组变换
  • Redis集群部署详解:主从复制、Sentinel哨兵模式与Cluster集群的工作原理与配置
  • LeetCode热题100(三十四) —— 23.合并K个升序链表
  • kalilinux - 目录扫描之dirsearch
  • 浅谈云计算04 | 云基础设施机制
  • 文件上传 分片上传
  • 【0391】Postgres内核 checkpointer process ① 启动初始化
  • 链路追踪SkyWalking
  • Uniapp判断设备是安卓还是 iOS,并调用不同的方法
  • 计算机网络 (42)远程终端协议TELNET
  • rtthread学习笔记系列-- 23 环形缓冲块 ringblock
  • HunyuanVideo 文生视频模型实践
  • Qt——QTableWidget 限制单元格输入范围的方法(正则表达式输入校验法、自定义代理类MyItemDelegrate)
  • 深度学习论文: CAS-ViT: Convolutional Additive Self-attention Vision Transformers
  • PyCharm文档管理
  • QNAP 上常用的几款软件
  • LabVIEW智能水肥一体灌溉控制系统
  • 提问:玩游戏输入法总弹出来咋回事哎
  • 链家房价数据爬虫和机器学习数据可视化预测
  • 【微服务】面试题 5、分布式系统理论:CAP 与 BASE 详解
  • 第十二章:算法与程序设计
  • RAG技术:是将知识库的文档和问题共同输入到LLM中
  • 持续集成 01|Gitee介绍、Pycharm使用Gitee
  • 信息安全、网络安全和数据安全的区别和联系
  • C++实现设计模式---抽象工厂模式 (Abstract Factory)
  • K8S开启/关闭审计日志
  • css盒子水平垂直居中