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

【单例模式(饿汉式和懒汉式)】

一、概念

单例模式就是一个类只能有一个实例,并且提供一个访问它的全局访问点。
通常通过私有化构造函数来实现只能通过类的内部创建实例。

二、饿汉式

饿汉式是单例模式中的一种,其特点为:在定义是就立即创建类的实例(真的饿了),但饿汉式是线程安全的,其核心代码如下:

class Singleton{
private:Singleton(){}static Singleton* m_instance;
public:static Singleton* getInstance(){return m_instance;}
};
Singleton* Singleton::m_instance = new Singleton;

完整实例:

#include <iostream>using namespace std;class Singleton {static Singleton* singleton;Singleton(){cout << "这是一个无参构造" << endl;}~Singleton(){cout << "这是析构" << endl;}
public:static Singleton* getinstence(){return singleton;}void show_info(){cout << this << endl;}//将编译器自动提供的拷贝构造与等号运算符重载移除掉Singleton(const Singleton& other) = delete;void operator=(const Singleton& other) = delete;
};Singleton* Singleton::singleton = new Singleton;int main()
{Singleton* s1 = Singleton::getinstence();s1->show_info();Singleton* s2 = Singleton::getinstence();s2->show_info();Singleton* s3 = Singleton::getinstence();s3->show_info();return 0;
}

运行结果:
在这里插入图片描述

三、懒汉式

懒汉式也是单例模式的一种,其特点为:在需要用到的时候才会创建实例,具有懒加载的功能,其是线程不安全的,代码如下:

class Singleton{
private:Singleton(){}static Singleton* m_instance;
public:static Singleton* getInstance(){if(m_instance == nullptr){m_instance = new Singleton;}return m_instance;}
};
Singleton* Singleton::m_instance = nullptr;

完整示例如下:

#include <iostream>using namespace std;class Singleton {static Singleton* singleton;Singleton(){cout << "这是一个无参构造" << endl;}~Singleton(){cout << "这是析构" << endl;}
public:static Singleton* getinstence(){if (singleton == nullptr) {singleton = new Singleton;}return singleton;}void show_info(){cout << this << endl;}//将编译器自动提供的拷贝构造与等号运算符重载移除掉Singleton(const Singleton& other) = delete;void operator=(const Singleton& other) = delete;
};Singleton* Singleton::singleton = nullptr;int main()
{Singleton* s1 = Singleton::getinstence();s1->show_info();Singleton* s2 = Singleton::getinstence();s2->show_info();Singleton* s3 = Singleton::getinstence();s3->show_info();return 0;
}

运行结果为:
在这里插入图片描述


http://www.mrgr.cn/news/2720.html

相关文章:

  • 趋势分享|Gartner解读中国企业容器管理新挑战:混合环境、容器安全、AI支持
  • Tiktok和Facebook广告哪个效果更好?
  • datax关于postsql数据增量迁移的问题
  • 华为od(D卷) 用连续自然数之和来表达整数
  • python 速成指南
  • RV1126交叉编译OPENCV的各种坑
  • 移动端页面出现闪屏
  • (八)Flink Join 连接
  • 五、SPA 单页面、MPA多页面的理解?它们的优缺点分别是什么?
  • Vue50 todolist自定义事件版本
  • 如何用ChatGPT 4.0创作高质量的小红书笔记?
  • 秋招力扣Hot100刷题总结——动态规划
  • HanLP分词的使用与注意事项
  • JsSIP Demo
  • 【自动驾驶】控制算法(三)轮胎侧偏与车辆动力学模型
  • MyBatis系列
  • 【adb】Mac配置adb环境踩坑记录
  • java版知识付费saas租户平台:剖析现代知识付费平台的功能架构与运营逻辑
  • Ubuntu下通过Docker部署Synapse服务器技术博客
  • 排序(归并排序,非比较排序)