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

singleton_pattern

什么是懒汉单例模式(程序在使用的时候才会构造这个类)
什么是饿汉单例模式(程序启动的时候就构造了这个类)
程序内只存在一个这样的类,不需要重复构造,避免浪费,如读取外部文件,只需一次读取,全局使用。

单例模式代码

//singleton_pattern.h
#pragma once
#include <memory>
#include <mutex>
class Monitor
{
public:static Monitor* getInstance();static Monitor& getInstance2();static void getName();
private:Monitor() = default;Monitor(const Monitor&) = delete;Monitor& operator=(const Monitor&) = delete;                static std::unique_ptr<Monitor> m_instance;static std::mutex m_mutex;
};#include <singleton_pattern.h>
//实例只会被创建一次,多线程下
std::unique_ptr<Monitor> Monitor::m_instance = nullptr;
Monitor* Monitor::getInstance() 
{if (m_instance == nullptr) {                     // 第一次检查(不加锁,提高性能)std::lock_guard<std::mutex> lock(m_mutex);   // 加锁if (m_instance == nullptr) {                 // 第二次检查(加锁保护)m_instance.reset(new Monitor());         // 创建实例}}return m_instance.get(); // 返回原始指针
}
//推荐
Monitor &Monitor::getInstance2()
{static Monitor instance; // Guaranteed to be destroyed.return instance;                      // Instantiated on first use.
}

上述代码保证单例模式可以安全的创建实例,数据的安全需要额外同步操作。

http://www.hskmm.com/?act=detail&tid=31146

相关文章:

  • ai出题
  • Python的Numpy、Pandas和Matplotlib(随笔)
  • 财务怎样做到业财融合 - 智慧园区
  • CF2146E
  • Spring Boot项目中集成Spring Security OAuth2和Apache Shiro
  • 【博客导航】
  • 部署向量数据库milvus
  • 从 0 到 1 实现高性能日志库 MiniSpdlog — 这可能是最适合新手的日志系统实战项目 !
  • 思想惰性:警惕时代中的精神惯性
  • journalctl 查看服务日志
  • 对ssh修改源码过程
  • 低代码时代,企业机遇在哪里
  • 2025 年浙江专升本培训学校推荐榜:浙江/台州/萧山/温州专升本机构,聚焦学历提升需求,杭州泓涵培训学校为学子护航
  • 25noip20d2t2 马戏表演 - Slayer
  • 从后端转行为AI工程师,转行AI大模型开发,附全套学习资源!收藏这份指南! - 实践
  • 实验一:现代C++初体验
  • 2025秋_11
  • 软件工程学习日志2025.10.14
  • CF1784E
  • nSwitch 存档自动备份系统模块 - autoSAVE
  • java基础7-字符串
  • 乐云具身活动体验
  • 【技术解决方案】联邦学习中遇到的Non-IID问题——隐语SecretFlow
  • 学习笔记:KTT
  • 题解:P10104 [GDKOI2023 提高组] 异或图
  • 2025 年筛网厂家推荐榜:聚焦场景适配与高效需求,锰钢筛网/聚氨酯筛网/合金焊接筛网/自清洁筛网/防堵筛网厂家滨州沃森网业成优选
  • P7076 [CSP-S2020] 动物园
  • 汽车价格战全面熄火了?不卷价格该卷什么? - 教程
  • P10067 [CCO 2023] Real Mountains
  • 先辈题解