qt单例模式
创始人
2024-03-04 21:55:40
0

文章目录

    • 1 介绍
    • 2 实现方法
      • 2.1 懒汉模式
      • 2.2 饿汉模式

1 介绍

  • 说明:保证一个类仅有一个实例,并提供一个访问它的全局访问点。(整个系统只需要拥有一个全局对象时,例如日志,数据库连接)

  • 作用:主要解决一个全局使用的类频繁地创建与销毁。

  • 注意:在使用单例模式时,构造函数是私有的。

  • 优点:
    1、在内存里只有一个实例,减少了内存的开销,尤其时频繁的创建和销毁实例。
    2、避免对资源的多重占用(写文件操作)‘

2 实现方法

  • 懒汉模式
  • 饿汉模式

2.1 懒汉模式

  • 懒汉:
    它在需要对象时,才判断是否已有对象,如果没有就立即创建一个对象,然后返回;如果已经有对象了,就不创建立即返回。
    只在外部对象第一次请求实例的时候才去创建。(调用时才实例化)
  • 特点:运行时获得对象的速度慢,但加载类的时候比较快。在整个应用的生命周期只有一部分时间在占用资源。
  • 使用:
    1)线程不安全写法:
static Log GetInstance()
{if(my_logger_ == null){my_logger_ = new Log();}return my_logger_;
}

2)线程安全写法:双检锁
1、申请Log的内存
2、变量指针指向该内存
3、在申请的内存上构造Log

static Log GetInstance()
{if(my_logger_ == null){QMutexLocker locker(&mutex);if(!my_logger_){Log *my_logger = new Log();my_logger_ =my_logger;  //避免出现野指针(申请完内存,编译器先指向内存,刚要构造时,被一个线程获取,就出现野指针,运行会出现段错误)}}return my_logger_;
}

2.2 饿汉模式

  • 饿汉:
    它在类加载的时候就立即创建对象。
  • 特点:加载类的时候比较慢,但运行时获得对象的速度比较快。它从加载到应用结束一直在占用资源。
  • 使用:
Log& Log::Instance()
{static Log log;return log;
}
synchronized关键字:
synchronized(获取锁的地方){
工作内容
}

相关内容

热门资讯

美国2年期国债收益率上涨15个... 原标题:美国2年期国债收益率上涨15个基点 美国2年期国债收益率上涨15个基...
汽车油箱结构是什么(汽车油箱结... 本篇文章极速百科给大家谈谈汽车油箱结构是什么,以及汽车油箱结构原理图解对应的知识点,希望对各位有所帮...
嵌入式 ADC使用手册完整版 ... 嵌入式 ADC使用手册完整版 (188977万字)💜&#...
重大消息战皇大厅开挂是真的吗... 您好:战皇大厅这款游戏可以开挂,确实是有挂的,需要了解加客服微信【8435338】很多玩家在这款游戏...
盘点十款牵手跑胡子为什么一直... 您好:牵手跑胡子这款游戏可以开挂,确实是有挂的,需要了解加客服微信【8435338】很多玩家在这款游...
senator香烟多少一盒(s... 今天给各位分享senator香烟多少一盒的知识,其中也会对sevebstars香烟进行解释,如果能碰...
终于懂了新荣耀斗牛真的有挂吗... 您好:新荣耀斗牛这款游戏可以开挂,确实是有挂的,需要了解加客服微信8435338】很多玩家在这款游戏...
盘点十款明星麻将到底有没有挂... 您好:明星麻将这款游戏可以开挂,确实是有挂的,需要了解加客服微信【5848499】很多玩家在这款游戏...
总结文章“新道游棋牌有透视挂吗... 您好:新道游棋牌这款游戏可以开挂,确实是有挂的,需要了解加客服微信【7682267】很多玩家在这款游...
终于懂了手机麻将到底有没有挂... 您好:手机麻将这款游戏可以开挂,确实是有挂的,需要了解加客服微信【8435338】很多玩家在这款游戏...