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

[C++][设计模式] : 单例模式(饿汉和懒汉)

单例模式

在这里插入图片描述

引言

对于程序设计的时候,我们有些时候不希望平凡的创建对象,比如创建这个一个对象的成本很高,比如线程池,这个时候我们希望共享一个对象,这个时候,就可以使用我们的单例模式。

单例模式本质上是一种程序设计的方式,我们通过合理的设计,使得某一种类只能定义一次,通过类的静态的方式调用

防止拷贝构造和赋值重载

其实只需要防止拷贝构造即可,因为构造不成功,更不可能赋值重载。

我们提供一种优雅的方式,继承nocopy类

// 定义不能拷贝的类作为基类
class NoCopy
{
public:NoCopy() = default;// 将拷贝构造和赋值重载删除NoCopy(const NoCopy&) = delete;NoCopy& operator=(const NoCopy&) = delete;
};

通过继承实现单例模式

这里我只使用了C++11, 也可以使用C++17的更高级的特性简化

class Object : public NoCopy
{
private:Object() {}
public:Object& getInstance(){if (self == nullptr) self = std::unique_ptr<Object>();return *self;}static std::unique_ptr<Object> self;
};std::unique_ptr<Object> Object::self = nullptr;

在这种情况下,我们只需要调用Object::getInstance()就可以直接获取到对象。

饿汉和懒汉模式

上面我创建的思想是懒汉模式。

饿汉模式就是无论我是否使用这个单例对象,我都会在执行程序的时候创建一个对象

懒汉模式更像是一种延迟定义,只有我们需要使用它的时候,我们才进行创建

  • 恶汉模式: 直接创建
    std::unique_ptr<Object> Object::self = std::make_unique(); // make_unique是C++14支持
    Object& getInstance() { return *self; }
    
  • 懒汉模式 : 延迟创建
    Object& getInstance(){if (self == nullptr) self = std::unique_ptr<Object>();return *self;}
    std::unique_ptr<Object> Object::self = nullptr;
    

相关文章:

  • 2.监控领域中行业黑话知识学习指南
  • 使用Ollama+open-webui搭建本地AI模型
  • 写实交互数字人:赋能消防知识科普,点亮智能交互讲解新未来
  • word表格批量转excel,提取表格数据到excel
  • SpringBoot+Junit在IDEA中实现查询数据库的单元测试
  • ⭐ Unity 实现屏幕涟漪效果:自动生成 \ 点击交互生成涟漪
  • 基于OpenCV和深度学习实现图像风格迁移
  • 分布式光纤测温及红外测温系统的区别?
  • 68、.NET Entity Framework(EF)
  • 每日Prompt:宫崎骏风格插画
  • YOLOv2 技术详解:目标检测的又一次飞跃
  • 大模型Prompt|提示工程的10个常见设计模式
  • 【数据传输常用命令】:docker常用命令
  • 1.ES介绍
  • Three.js搭建小米SU7三维汽车实战(4)场景搭建
  • Eureka 服务注册与发现原理和使用
  • 常见的几种排序算法
  • 预训练CNN网络的迁移学习(MATLAB例)
  • webgl工程发布问题解决记录
  • 【在线五子棋对战】五、前端扫盲:html css javascript ajax jquery websocket
  • 广东网站设计流程/百度推广公司怎么代理到的
  • 做啥网站赚钱/网球排名即时最新排名
  • 溧阳市建设网站/指数分布的期望和方差
  • 做义工的靠谱网站/销售怎么找客户源
  • wordpress自动生成缩略图/东莞关键字排名优化
  • 关于网站排名优化需要怎么做/网站建设规划要点详解