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

潍坊网站制作保定公司电话郴州seo公司

潍坊网站制作保定公司电话,郴州seo公司,推荐坪地网站建设,找客户在公司做网站文章目录 (三)创建型模式:单例模式饿汉式懒汉式饿汉式 v.s. 懒汉式 (三)创建型模式:单例模式 单例模式在于确保一个类只有一个实例,并提供一个全局访问点来访问该实例。在某些情况下&#xff0…

文章目录

  • (三)创建型模式:单例模式
    • 饿汉式
    • 懒汉式
    • 饿汉式 v.s. 懒汉式

(三)创建型模式:单例模式

单例模式在于确保一个类只有一个实例,并提供一个全局访问点来访问该实例。在某些情况下,某些代码组件(如线程池,日志记录器)需要在整个应用程序中共享,使用单例模式可以实现组件资源的复用,并简化系统设计。

单例模式实现方式主要包括饿汉式和懒汉式两种。

饿汉式

饿汉式是指在类加载的时候就创建单例实例,不管后续是否会使用这个实例。

class Singleton {
private:static Singleton* instance; // 静态成员变量,属于类本身而不是类的任何特定对象Singleton() {}              // 私有构造函数防止外部实例化public:static Singleton* getInstance() {  // 全局访问点return instance;}
};Singleton* Singleton::instance = new Singleton();  // 在静态成员变量初始化时创建实例

示例:

#include <iostream>class Singleton {
private:static Singleton* instance; Singleton() {} public:static Singleton* getInstance() {return instance;}void doSomething() {std::cout << "Doing something..." << std::endl;}};Singleton* Singleton::instance = new Singleton();int main() {Singleton* s1 = Singleton::getInstance();Singleton* s2 = Singleton::getInstance();if (s1 == s2) {std::cout << "s1 and s2 are the same instance" << std::endl;}s1->doSomething();return 0;
}
s1 and s2 are the same instance
Doing something...

在多线程环境下,饿汉式是线程安全的,因为实例在类加载时就已经创建好了,不存在并发访问创建实例的问题。

懒汉式

懒汉式是指在第一次使用时才会创建单例实例,实例的创建被延迟到第一次使用 getInstance() 方法时。

class Singleton {
private:static Singleton* instance;Singleton() {}  public:static Singleton* getInstance() {if (instance == nullptr) { // 第一次使用时才会创建单例实例instance = new Singleton();}return instance;}
};Singleton* Singleton::instance = nullptr;

示例:

#include <iostream>  class Singleton {  
private:  static Singleton* instance;  Singleton() {} // 私有构造函数  public:  static Singleton* getInstance() {  if (instance == nullptr) {  instance = new Singleton();  }  return instance;  }  void doSomething() {  std::cout << "Doing something..." << std::endl;  }  
};  Singleton* Singleton::instance = nullptr; // 静态成员变量初始化  int main() {  Singleton* s1 = Singleton::getInstance();  Singleton* s2 = Singleton::getInstance();  if (s1 == s2) {  std::cout << "s1 and s2 are the same instance" << std::endl;  }  s1->doSomething();  return 0;  
}
s1 and s2 are the same instance
Doing something...

懒汉式在多线程环境下是不安全的,因为多个线程可能同时进入判断条件,导致创建多个实例。因此,需要通过加锁等机制来保证线程安全:

 static std::mutex mtx;static Singleton* instance;Singleton* Singleton::getInstance() {// 使用互斥锁(`std::mutex`)来保证只有一个线程能够创建实例。std::lock_guard<std::mutex> lock(mtx);if (instance == nullptr) {instance = new Singleton();}return instance;}

为了避免每次调用都加锁,产生额外的性能开销,可以在加锁的基础上,进行双重检查:

  static std::mutex mtx;static Singleton* instance;Singleton* Singleton::getInstance() {if (instance == nullptr) {std::lock_guard<std::mutex> lock(mtx);if (instance == nullptr) {instance = new Singleton();}}return instance;}

饿汉式 v.s. 懒汉式

在饿汉式单例模式中,单例的实例在程序启动时就立即创建。这种方式的好处在于它的简单性和线程安全性(无需额外的同步机制)。

在懒汉式单例模式中,单例的实例是在首次被需要时才被创建。这种方式的好处在于它可以延迟实例的创建,从而减少程序启动时的资源消耗和初始化时间。

http://www.hyszgw.com/news/73520.html

相关文章:

  • 什么网站加盟代理做的专业黄山旅游必去十大景点
  • php网站开发怎么样网站后台模板 jquery
  • dz网站自己做的模板放在哪里报告网站开发环境
  • 建设网站的建设费用包括中国设计素材网
  • 网页设计软件dw全称怎么做淘宝客网站优化
  • 男女做那种的视频网站金华永康网站建设
  • 红安县城乡建设局官方网站浙江省建设工程质量管理协会网站
  • 响应式网站 教程惠州人才市场最新招聘信息网
  • 咖啡豆网站模板免费咨询的图片
  • 北京社招网站成都网站搜索优化
  • 专业刷粉网站网站 建设 内容
  • 汕头汽配网站建设vi设计和品牌设计的区别
  • 个人网站的设计与制作论文网站建设路由器怎么设置
  • 长春企业网站哪里做的好推广不收费的网站有哪些
  • 天津做网站的大公司网站建设 主要学是么
  • 怎么打开域名网站建立网站服务器怎么弄
  • 网站建网站建设网站站网站国家企业公示平台官网
  • 深圳网站建设设计首选公司网络推广培训职业学校
  • yy头像在线制作网站网页制作与网站建设试题和答案
  • 做网站和自媒体哪个好钢城网站建设
  • 廉洁常德网站企业设计网站推荐
  • 国外免费做网站软件二次网站开发平台
  • 机械网站精选校友网站建设的重要性
  • 网站建设优化400报价可以免费做中考题的网站
  • 网站建设综合技术找广网
  • 南京有关制作网站的公司网站建设首选建站系统
  • 淡水网站建设定制如何做好产品网络推广
  • 网站项目整体思路人人开发网站
  • 网站建设资金中国网库网站介绍
  • 南山做网站哪家好外贸公司 如何做公司网站