文章目录

  • 前言
  • 一、单例模式的概念
    • 1.2单例模式的分类
    • 1.2懒汉和饿汉的利弊
  • 二、代码实现
    • 1.饿汉模式
    • 2.懒汉模式
  • 总结

前言

提示:单例模式的出现。由于在某些场景中你最多而且必须有一个对象存在的情况,比如,监控摄像头对象,他在监控开启后只能有一个监控对象,单例模式就应运而生。


提示:以下是我对单例模式的理解

一、单例模式的概念

1.2单例模式的分类

单例模式:主要分为懒汉模式和饿汉模式。饿汉模式呢顾名思义比较饥渴,它会在程序加载过程中将对象进行初始化出来。懒汉模式会在程序运行阶段将对象初始化出来。两者的区别

1.2懒汉和饿汉的利弊

 懒汉模式的缺点:在加载时就会初始化对象,比较浪费内存,容易产生垃圾对象。由于其在加载时就会实例化对象,没有达到懒加载的效果。懒汉模式的优点:线程安全,不用加锁,效率较高。会在调用GetInstance前产生实例化对象,对象 创建早。懒汉模式缺点:只有加锁才能保证多线程的安全性问题。而加锁会影响运行效率。实现难度相较于饿汉较大懒汉模式的优点:线程安全,懒加载,在第一次调用GetInstance的时候才会实例化对象。减少内存浪费。

二、代码实现

1.饿汉模式

饿汉模式

#include<iostream>
using namespace std;
//饿汉模式需要将构造函数,拷贝构造函数,赋值运算符的重载函数进行一个
//删除或者是私有化,定义一个静态成员变量,让他在程序加载时进行实例化对象
class Singleton {public:static  Singleton& GetInstance() {//返回在程序加载时就实例化出的对象return sgl;}
private:static Singleton sgl; //定义一个静态成员变量
private:
//将其构造,拷贝构造,赋值运算符重载私有化Singleton() {}Singleton(Singleton&) = delete; //C++11新特性Singleton& operator=(Singleton&) = delete; //C++11新特性
};
//在类里面进行定义的静态成员变量需要在类外面进行实例化
Singleton Singleton::sgl;

2.懒汉模式

#include<iosteam>
#include<mutex>
using namespace std;
class Singleton {public:static Singleton* GetInstance() {if (sgl == nullptr) {//lock外的判空,//是因为获取锁,是很浪费时间的,//获取锁之外还有一层判断,//那么在第二次获取单例对象的时候,//lock外的if判断发现指针已经非空,就不会再获取锁了,//直接返回了对应的对象mutex_t.lock();if (sgl == nullptr) {//lock里面判断一次,//因为可能有多个线程在lock处等待,//一个成功之后,会将m_psl设置为非空,//这样下个线程就算拿到lock资源,//再进去发现指针非空就离开了sgl = new Singleton();}//这样双层检测,即保证了对象创建的唯一性,又减少了获取锁浪费的时间和资源mutex_t.unlock();}return sgl;}//创建内部类让其在程序结束后将创建的单例销毁class CGarbo {~CGarbo() {delete Singleton::sgl;}};
private:static Singleton* sgl; //定义单例对象指针static mutex mutex_t; //定义锁static CGarbo gc; //定义内部类对象
private:
//将其构造拷贝构造和赋值运算符重载全部私有化Singleton() {}Singleton(Singleton&) = delete;Singleton& operator=(Singleton&) = delete;
};
//类外对其静态成员变量进行一个初始化
Singleton* Singleton::sgl = nullptr;
mutex Singleton::mutex_t;
Singleton::CGarbo Singleton::gc;

懒汉模式的双if判断有对https://blog.csdn.net/andrewgithub/article/details/108966947
的参考。


总结

我只是对我学到的东西进行了一个简单的总结。希望各位大佬多多指出错误和不足。

单例模式的C++实现(懒汉模式和饿汉模式的详细讲解和实现)相关推荐

  1. C++设计模式--单例模式详解(懒汉模式、饿汉模式、双重锁)

    C++设计模式--单例模式详解(懒汉模式.饿汉模式.双重锁) 应用场景 一.单例模式是什么? 二.使用步骤 1.UML图 2.代码实现 应用场景 通常我们在做通讯的时候,我们跟服务器数据交互,假如每次 ...

  2. 2023-01-26 JS设计模式-单例模式:单例模式的原理和实现,懒汉模式和饿汉模式,单例模式实现登录框

    文章目录 1.什么是单例模式? 介绍 特点 结构 2.如何实现一个单例模式? 思路 实现代码 3.单例模式的优缺点 4.懒汉模式和饿汉模式 懒汉模式:一开始不会实例化,什么时候用才new出来实例化 饿 ...

  3. 单例模式(懒汉模式和饿汉模式)

    单例模式 单例模式的两种方式 1.饿汉模式 2.懒汉模式 懒汉模式代码

  4. 大聪明教你学Java设计模式 | 第一篇:单例模式 (懒汉模式和饿汉模式)

    前言 大聪明在写代码的过程中发现设计模式的影子是无处不在,设计模式也是软件开发人员在软件开发过程中面临的一般问题的解决方案.大聪明本着"独乐乐不如众乐乐"的宗旨与大家分享一下设计模 ...

  5. C# 设计模式之单例模式(懒汉模式、饿汉模式、静态内部类模式)

    C# 设计模式之单例模式(懒汉模式.饿汉模式.静态内部类模式) 应用场景:在整个软件运行生命周期内,一个类只允许一次实例化,例如数据库连接池的连接对象创建:通过使用单例模式来避免反复创建连接对象,从而 ...

  6. Java 懒汉模式与饿汉模式

    懒汉模式与饿汉模式 1.饿汉模式demo 来了就要吃,相当于有现成的- public class EleManSingleton { //1.创建类的唯一实例,使用private static修饰 p ...

  7. 单例模式---懒汉模式与饿汉模式

    单例模式:1)一个类只能创建一个实例2)构造函数和静态变量(加载类时即初始化)需为private3)get方法应该为public static,可供全局访问 //懒汉模式 public class l ...

  8. 设计模式——单例模式(懒汉模式,饿汉模式)

    声明: 本博客参考C语言中文网和优秀博客总结得出: (1)C语言中文网链接 (2)优秀博客链接 单例模式的定义: 指一个类只有一个实例,且该类能自行创建这个实例的一种模式.例如,Windows 中只能 ...

  9. 单例模式的四种实现方式(饿汉模式、懒汉模式、静态内部类、枚举类)

    首先,设计模式是我们程序员在软件开发过程中面临的一般问题的解决方案,通过学习设计模式可以使我们在编程时更加有条理性,同时培养我们写代码的思维能力,从而提高我们的工作效率.接下来就跟着博主的脚步往下走吧 ...

最新文章

  1. git 修改标签名称_Git常用命令汇总,希望能帮到你
  2. 【Ubuntu-Opencv】Ubuntu14.04 Opencv3.3.0 安装配置及测试
  3. linux下kegg注释软件,KEGG数据中全部代谢反应和代谢物注释信息的下载
  4. java学习(3):学生管理系统3
  5. Android 6.0 源代码编译实践
  6. C语言两个数比较大小和三个数比较大小,代码
  7. 王道c语言,王道训练营-C语言-一
  8. 英语单词记忆 词源法-思维导图(01)词源vinc/vict-40
  9. mac的hosts文件位置在哪?
  10. 最新苹果开发者账号添加设备UDID
  11. darda oracle tfa_OSW - feiyun8616 - 博客园
  12. andorid6.0 mtk6737平台 ctp调试方法
  13. ZYNQ基本使用(2) GPIO的使用
  14. php调用nexmo发送短信,在 Laravel 中 “规范” 的开发短信验证码发送功能
  15. 2019 初入IT十年(下)---- 视线所及只剩生活
  16. mysql时间函数详解
  17. Docker入门到部署
  18. <Zhuuu_ZZ>HIVE(终)总结大全:是兄弟就来三连我
  19. 京东“毕业”下的众生相:房贷、二胎,这失业后的日子怎么办?
  20. 矩阵行秩与列秩的关系。

热门文章

  1. 聚合管道aggregate
  2. 根据配送日期,计算到货时间 (客制化自用)
  3. 备份?存档?原来两者有如此大的区别...
  4. python的foolnltk库实现中文NER
  5. Suricata6.0流表管理源码注释九:补充:流新建过程中对于超时流的处理
  6. DES算法详解及实现(C语言)
  7. mysql8 主从复制
  8. vscode 调试参数_VSCode调试配置
  9. 全球与中国脱芳烃溶剂市场深度研究分析报告
  10. 删除cookie之js实现