//懒汉模式
//优点: 第一次使用实例对象时,创建对象
//缺点: 复杂#include <iostream>
#include <mutex>
#include <thread>
using namespace std;class Singleton
{
public:static Singleton* GetInstance()  //获取实例{if (_spInstance == nullptr)  //双检查(Double-Check),保证效率和线程安全//第二个以后的线程不用检查锁,提高效率{_smtx.lock();            //(多线程)第一个线程进来,并行的第二个线程进不来if (_spInstance == nullptr){_spInstance = new Singleton;}_smtx.unlock();}return _spInstance;}// 实现一个内嵌垃圾回收类     class CGarbo{public:~CGarbo() {if (_spInstance){delete _spInstance;}}};private:Singleton(){cout << "Singleton()" << endl;}~Singleton()     //调CGarbo类的析构{cout << "~Singleton()" << endl;}//防拷贝Singleton(const Singleton&) = delete;Singleton& operator=(const Singleton&) = delete;static Singleton* _spInstance;  //单例对象指针static mutex _smtx;             //互斥锁static CGarbo _scg;
};Singleton* Singleton::_spInstance = nullptr;
mutex Singleton::_smtx;Singleton::CGarbo Singleton::_scg;//测试多线程
void func()
{//Singleton::GetInstance();                 //若不加锁,会丢掉第一个线程的返回值cout << Singleton::GetInstance() << endl;   //测试一下
}int main()
{//多线程,两个线程并行去调func函数(用来测试)thread t1(func); thread t2(func);//线程等待t1.join();t2.join();cout << Singleton::GetInstance() << endl;cout << Singleton::GetInstance() << endl;return 0;
}

单例模式——懒汉模式(C++)相关推荐

  1. 单例模式(懒汉模式-双检锁、饿汉模式、静态内部类模式)-详细

    文章目录 前言 单例模式(懒汉模式-双检锁.饿汉模式.静态内部类模式)-详细 01 单例模式是什么? 02 单例模式的好处? 03 单例模式的三种模式 03::01 懒汉模式 03::01::01 问 ...

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

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

  3. C++单例模式 : 懒汉模式 与 饿汉模式

     单例模式:         只能有一个实例,有懒汉和饿汉区分,实现核心思想:         1.构造函数私有化         2.使用静态函数作为接口来获取类对象 1.懒汉模式:         ...

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

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

  5. 单例模式 之 单例模式——懒汉模式

    懒汉模式:和饿汉模式不同,懒汉模式并不会一开始声明对象,而是需要等到调用时再声明对象.他很懒,所以你叫"它"它才会动... 代码1: /*** 懒汉模式*/ public clas ...

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

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

  7. 判断double_深入解析单例模式之懒汉模式---Double-Check及volatile关键字

    导读:在日常开发中对单例设计模式的应用十分常见,而看似简单小巧的设计模式其内部却蕴含着丰富的知识点.单例的创建方式有很多如懒汉模式和饿汉模式等.不同的语言又有不同的实现方式,但其本质的思想为:保证一个 ...

  8. Java多线程案例——单例模式(恶汉模式和懒汉模式)

    一,什么是单例模式 单例顾名思义指的是单个实例对象(所以单例模式要求构造方法私有化才能保证在类外不能创建该类的实例化对象):在有的场景中,不应该创建多个对象时就应该使用单例模式,一旦使用了单例模式,此 ...

  9. 单例模式的实现-懒汉模式【大话设计模式之爱你一万年:单例模式:我的女朋友只有你一个】

    2.单例模式的实现-懒汉模式 视频学习地址  -- <大话设计模式之爱你一万年>:https://dwz.cn/wqO0MAy7 这一节我们先来看看一种实现模式,懒汉模式,这也是这么中实现 ...

最新文章

  1. layer.open增添模板效果母页面
  2. c语言文件打开函数,C语言fopen函数中文件打开方式(参数值)
  3. SIFT算法原理(不带公式)
  4. 乱查征信,贷款不想要了吗?
  5. 数据可视化,带给你的惊艳并不止这一点!
  6. java 手机 上传图片_在手机端使用拍照功能上传图片的功能的解决文案
  7. [PAT乙级]1007 素数对猜想
  8. 基于centos8搭建zookeeper集群
  9. 使用匿名内部类实现方式二线程创建 java 1615474836
  10. zoj 3761(并查集+搜索)
  11. oracle linux 图形化,Linux7图形化安装Oracle11g教程,亲测实用有效!
  12. Python出现AttributeError: module ‘tkinter‘ has no attribute ‘messagebox‘,已解决
  13. C++ STL 各种搜索查找算法总结使用
  14. 国内Maven仓库--阿里云Aliyun仓库地址及设置
  15. hdoj4540:威威猫系列故事——打地鼠(dp基础题-数塔思想)
  16. 计算机鼠标显示停顿原因,经常遇到鼠标指针停顿卡的解决方法
  17. Axure8.0 装汉化包
  18. 弧长公式 | 微积分
  19. the7主题footer.php,the7主题的安装和数据导入
  20. 线性拟合(回归)的小结

热门文章

  1. windows 检测无键鼠操作时间_HP快速卡简易操作流程
  2. netstat详解_需要!Linux常用监视和故障排查命令详解
  3. license 验证服务器唯一机器码_代码审计工具Fortify 17.10及Mac平台license版本
  4. 苹果手机home键在哪里_苹果手机为什么没有返回键?原来隐藏着更好的方法,涨知识了...
  5. java自动化测试报告_Java自动化测试框架-10 - TestNG之测试结果篇(详细教程)
  6. 图片压缩大小java_压缩图片大小(Java源码)
  7. 减少模型方差的方法借鉴
  8. java 登录下线_java web中Listener的实现(实现用户在线统计数量和强制用户下线)...
  9. vba 邮件body html,Excel VBA中的Outlook电子邮件和签名 – .Body vs .HTMLbody
  10. Windows上mount NFS V4