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

单例模式两种实现方法

设计模式单例模式#include iostream #includemutex class MyCAS { private: MyCAS() {}; MyCAS(const MyCAS*) delete; MyCAS operator(const MyCAS*) delete; private: static MyCAS* m_instance; static std::mutex m_mutex; public: static MyCAS* GetInstance() { if (m_instance nullptr) { std::lock_guardstd::mutex lock(m_mutex); if (m_instance nullptr) { m_instance new MyCAS(); static CGarhuishou cl; } } return m_instance; }; class CGarhuishou { public: ~CGarhuishou() { if (MyCAS::m_instance) { delete MyCAS::m_instance; MyCAS::m_instance nullptr; } } }; void func() { std::cout 测试 std::endl; } }; MyCAS* MyCAS::m_instance nullptr; std::mutex MyCAS::m_mutex;使用std::once_flag 作为一个标记std::call_once通过这个标记来决定对应传入的函数是否执行调用call_once成功后call_once会反转这个标记这样再次调用这个call_once后传入的函数就不会再次被执行了#include iostream #includemutex class MyCAS { private: MyCAS() {}; MyCAS(const MyCAS*) delete; MyCAS operator(const MyCAS*) delete; private: static MyCAS* m_instance; static std::once_flag m_flag; public: static void CreateInstance() { m_instance new MyCAS(); static CGarhuishou cl; } static MyCAS* GetInstance() { std::call_once(m_flag, CreateInstance); return m_instance; }; class CGarhuishou { public: ~CGarhuishou() { if (MyCAS::m_instance) { delete MyCAS::m_instance; MyCAS::m_instance nullptr; } } }; void func() { std::cout 测试 std::endl; } }; MyCAS* MyCAS::m_instance nullptr; std::once_flag MyCAS::m_flag;
http://www.rkmt.cn/news/1397494.html

相关文章:

  • MySQL 运维实战系列(七)mysql 主从配置
  • 超高速磨削试验台数字化设计与仿真分析【附仿真】
  • CANN 学习路线 - CANN学习路径规划与资源推荐
  • 从Wi-Fi到汽车:聊聊FMCW雷达技术怎么悄悄改变了我们的生活
  • ABAP:对外发布Web Service
  • 2026年食品级碳酸氢铵厂家名录:工业碳铵生产企业/工业级碳酸氢铵生产企业/工业级碳铵生产企业/食品碳酸氢铵生产企业/选择指南 - 优质品牌商家
  • 【图像检测】基于霍夫变换实现道路检测附Matlab代码
  • Cortex-R52启动地址限制与MPU配置解析
  • 小红书与中科院突破:反向学习法实现AI数学推理能力提升11.5分
  • Agent 性能优化实战:延迟、Token、并发三个维度怎么调
  • LFGB和FDA对食品接触材料的要求有何不同?
  • 从酒鬼掉崖到推荐系统:用Python模拟Random Walk算法,理解PageRank的数学基础
  • 端侧推理配方:鸿蒙系统上的模型部署与优化
  • 从RealSense D435i到BundleFusion:手把手构建离线三维重建数据流水线
  • 消息发送失败处理与 DLQ 补偿流程
  • 面向对象设计原则(一)
  • 5. 【穷举-作业-编程题-3】求阿姆斯特朗数
  • OPC 中国是做什么的?一文读懂 OPC 与 OPD 体系
  • 面试官:说一下 Agent 的常见范式
  • 精通开关电源设计 day1
  • 【限时开源】Claude长文档推理增强工具包(v1.3):自动段落锚定+逻辑图谱构建+矛盾点高亮——仅剩最后87个内测名额
  • 告别多平台折腾!一个 Key 调用国内主流大模型,DMXAPI 开发者实测体验
  • 被骂上热搜!粉木耳标签涉嫌低俗擦边。盒马火速致歉并下架
  • 2026西南方管供应商推荐及选购指南:镀锌方管生产厂家/附近方管批发/附近钢材批发市场/附近钢材采购批发/哪里有方管批发/选择指南 - 优质品牌商家
  • 8051单片机SFR外部访问机制与工程实践
  • 2026年Q2山东家用梯厂家专业度实测对比评测:山东三层电梯、山东二层电梯、山东别墅电梯、山东四层电梯、山东复式楼电梯选择指南 - 优质品牌商家
  • FDE:一个人 + AI,能不能跑通全栈?
  • PatchTST时间序列预测终极指南:从零开始构建精准预测模型
  • 保姆级教程:手把手教你下载并解析行人属性数据集PA100K(附百度云链接)
  • 别怕数学!用Python和NumPy图解机器学习里的线性代数(附代码)