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

单例模式的两种设计

单例模式确保一个类只有一个实例,并提供一个全局访问点。


1. 饿汉模式 (Eager Initialization)

饿汉模式在程序启动时就创建实例,线程安全。

cpp

class EagerSingleton {
public:// 删除拷贝构造函数和赋值运算符EagerSingleton(const EagerSingleton&) = delete;EagerSingleton& operator=(const EagerSingleton&) = delete;// 提供全局访问点static EagerSingleton& getInstance() {return instance;}void doSomething() {std::cout << "EagerSingleton is doing something." << std::endl;}private:// 私有构造函数EagerSingleton() = default;// 类加载时就初始化实例static EagerSingleton instance;
};// 在类外初始化静态成员
EagerSingleton EagerSingleton::instance;

特点:

  • 线程安全(因为实例在main函数之前初始化)

  • 简单直接

  • 可能造成资源浪费(如果从未使用)

2. 懒汉模式 (Lazy Initialization)

懒汉模式在第一次使用时才创建实例,需要考虑线程安全问题。

双重检查锁定版(传统线程安全实现)

cpp

#include <mutex>class DoubleCheckedLockingSingleton {
public:static DoubleCheckedLockingSingleton& getInstance() {if (instance == nullptr) {std::lock_guard<std::mutex> lock(mutex);if (instance == nullptr) {instance = new DoubleCheckedLockingSingleton();}}return *instance;}void doSomething() {std::cout << "DoubleCheckedLockingSingleton is doing something." << std::endl;}private:DoubleCheckedLockingSingleton() = default;~DoubleCheckedLockingSingleton() = default;DoubleCheckedLockingSingleton(const DoubleCheckedLockingSingleton&) = delete;DoubleCheckedLockingSingleton& operator=(const DoubleCheckedLockingSingleton&) = delete;static DoubleCheckedLockingSingleton* instance;static std::mutex mutex;
};// 初始化静态成员
DoubleCheckedLockingSingleton* DoubleCheckedLockingSingleton::instance = nullptr;
std::mutex DoubleCheckedLockingSingleton::mutex;

相关文章:

  • 手动修改uart16550的FIFO深度?
  • 从0开始学习大模型--Day04--大模型的框架以及基本元素
  • 深入探索Laravel框架中的Blade模板引擎
  • C语言 第六章 结构体(2)
  • MySQL核心内容【持续更新中】
  • 简述Linux操作系统并安装配置Linux
  • 26考研——中央处理器_指令执行过程(5)
  • 【 SVG动态拼接】前端生成阻抗电路图
  • 仁合医疗核心产品:引领医疗科技新潮流
  • LLM量化方法:ZeroQuant、LLM.int8()、SmoothQuant、GPTQ、AWQ
  • CRC 循环冗余校验
  • Vue3 + Element Plus 动态表单实现
  • vscode离线安装python插件
  • git高效杀器——cz-customizable 搭配 commitlint
  • 抖音到店摸着京东外卖过河
  • 树初步 #1(插排串联 - 辽宁省2024CCPC)
  • 【八股消消乐】你在项目中如何优化垃圾回收机制?
  • 动态规划之背包问题:组合优化中的经典NP挑战
  • 基于vue框架的电子商城m8qu8(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • WPDRRC 模型:构建动态闭环的信息安全防御体系
  • 第三届“老山国际春茶节”活动在云南麻栗坡举办
  • 印称一名高级官员在巴基斯坦发动的袭击中死亡
  • 央行谈MLF:逐步退出政策利率属性回归流动性投放工具
  • 江西暴雨强对流明显,专家:落雨区高度重叠,地质灾害风险高
  • 本科生已发14篇SCI论文被指由其教授父亲挂名,重庆大学成立工作组核实
  • 国家主席习近平同普京总统出席签字和合作文本交换仪式