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

C++设计思想-001-设计模式-单例模式

1.单例模式优点

保证一个类仅有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享;

实现:

1.1 单例模式的类只提供私有的构造函数

1.2类定义中含有一个该类的静态私有对象

1.3该类提供了一个静态的公有的函数用于创建或获取它本身的静态私有对象

2.单例模式分为饿汉、懒汉模式,多线程下考虑用懒汉模式,一般都用懒汉模式

2.1饿汉模式

特点:开始即初始化单例对象
优点:不用担心多线程问题
缺点:可能程序没有用到该单例对象,造成浪费

#include <iostream>
using namespace std;
class Singleton {
public:
    static Singleton* GetInstance() {
        return &singleton_;
    }

private:
    Singleton(){}
    static Singleton singleton_;
};

Singleton Singleton::singleton_;
int main() {
    auto p1 = Singleton::GetInstance();
    auto p2 = Singleton::GetInstance();
    bool result = (p1 == p2);
    cout << result << endl;
    return 0;
}

2.2懒汉模式

特点:需要时再实例化单例对象
优点:在不使用到单例对象时不会造成资源浪费
“缺点”:需要考虑多线程问题,稍微复杂一点(加锁解决)

#include <iostream>
#include <mutex>
using namespace std;
class Singleton {
public:
	static Singleton* GetInstance() {
		//判断是否已存在实例
		if (p_singleton_ == nullptr) {
			//加锁
			lock_guard<mutex> lock(mux_);
			//可能两个线程同时通过第一次检查,一个线程获得锁,可能另外一个线程已经实例化
			if (p_singleton_ == nullptr) {
				p_singleton_ = new Singleton();
	

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

相关文章:

  • 【C++笔记】C++三大特性之多态
  • MCU的时钟体系
  • 算法日记 26-27day 贪心算法
  • 【ubuntu18.04】vm虚拟机复制粘贴键不能用-最后无奈换版本
  • LLaMA-Factory全流程训练模型
  • 基于STM32的智能温室控制系统设计
  • Controller Baseband commands速览
  • Mac上详细配置java开发环境和软件(更新中)
  • 跨平台WPF框架Avalonia教程 十四
  • python编写一个自动清理三个月以前的邮件脚本
  • 攻防世界-mfw
  • antd table表格设置最小宽度,列宽等比例显示
  • 26-ES集群搭建、身份认证配置
  • 【leetcode】704. 二分查找
  • 力扣 多数元素-169
  • 基于python Django的boss直聘数据采集与分析预测系统,爬虫可以在线采集,实时动态显示爬取数据,预测基于技能匹配的预测模型
  • css三角制作(二十课)
  • 【html网页页面002】html+css制作实现家乡江苏网页主题制作(5页面附效果图)
  • 2024-11-17 -MATLAB三维绘图简单实例
  • 发布 npm 包推送到官方库时 提示 connect ETIMEDOUT
  • 24首届数证杯(流量分析部分)
  • EM算法与高斯混合聚类:理解与实践
  • QT使用libssh2库通过密匙实现sftp协议上传文件
  • 【UE5】在材质Custom写函数的方法
  • UniAPP快速入门教程(一)
  • 目标检测评估指标详解