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

C++二十三种设计模式之单例模式

C++二十三种设计模式之单例模式

  • 一、组成
  • 二、特点
  • 三、目的
  • 四、缺点
  • 五、示例代码

一、组成

单例类:主要包含私有静态实例变量、公共静态方法、线程安全机制(可选)、序列化控制‌(可选,将对象的状态保存到存储介质中,如网络或文件)、反序列化(可选,即从存储介质中重新恢复对象的状态)。

二、特点

1、在一个进程下只实例出一个对象。
2、构造函数私有化,防止外部实例化。
3、使用静态实例变量和公共静态方法,来提供全局访问点。从而保证只有一个实例。
4、实例化对象的时机分两种:饿汉(发出了该类的需求就实例化对象)和懒汉(用到该对像才实例化对象)。

三、目的

确保一个类只有一个实例。

四、缺点

1、违反软件设计中单一职责原则,创建实例和业务逻辑在一个类中。
2、不适用于多线程环境,如果没有对创建实例和访问实例加锁会导致线程安全问题出现。

五、示例代码

#include<iostream>
#include <vector>
#include <string>
#include <mutex>

using namespace std;

class Singleton {
	Singleton() {}
	~Singleton() {}
	Singleton(const Singleton&) = delete;
	Singleton& operator=(const Singleton&) = delete;
	//声明
	static Singleton* data;//私有静态实例变量
	static mutex mtx;
public:
	static Singleton* GetInstance() {//公共静态方法
		unique_lock<mutex> lock(mtx);
		if (data == nullptr) {
			data = new Singleton();
			lock.unlock();
		}
		return data;
	}
};

//初始化类静态变量
Singleton* Singleton::data = nullptr;
mutex Singleton::mtx;

int main() {
	Singleton* temp = Singleton::GetInstance();
}

http://www.kler.cn/a/471967.html

相关文章:

  • 操作手册:集成钉钉审批实例消息监听配置
  • TensorRT-LLM中的MoE并行推理
  • 后台管理系统引导功能的实现
  • Wi-Fi Direct (P2P)原理及功能介绍
  • 【Nginx】设置https和http同时使用同一个端口访问
  • Springboot SAP Docker 镜像打包问题
  • 小白学Pytorch
  • Java到底是值传递还是引用传递????
  • 无人机低小慢探测难题!
  • 分布式专题(11)之Zookeeper特性与节点数据类型详解
  • Understanding the Lomb–Scargle Periodogram
  • Sphinx 使用指南
  • Eclipse配置Tomcat服务器(最全图文详解)
  • 智能工厂的设计软件 应用场景的一个例子: 为AI聊天工具添加一个知识系统 之25 祖传代码:垂类划分出负责监管控的“三层结构”
  • ArmSoM RK3588/RK3576核心板,开发板网络设置
  • 《Windows基础与网络安全:用户账户管理与安全策略》
  • c#集成npoi根据excel模板导出excel
  • TCP 演进之路:软硬件跷跷板与新征程
  • 农产品智慧物流系统
  • 【NLP高频面题】用RNN训练语言模型时如何计算损失?
  • 【网络安全设备系列】15、安全网关/统一威胁管理(UTM)
  • golang中的迭代器和 iter 包
  • Ollama VS LocalAI:本地大语言模型的深度对比与选择指南
  • 嵌入式技术之Linux(Ubuntu) 一
  • 【51单片机】01入门篇
  • Android13蓝牙接收文件不提示问题