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

[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;
    
http://www.xdnf.cn/news/13777.html

相关文章:

  • php列表头部增加批量操作按钮,多选订单数据批量微信退款(含微信支付SDK)
  • 洛谷-P3375 【模板】KMP
  • 前端导出PDF(适配ios Safari浏览器)
  • 常见的网络协议有哪些
  • 图像匹配算法 笔记2025
  • 【从零学习JVM|第七篇】快速了解直接内存
  • Qt QTcpSocket的write无法发送数据【已解决】
  • 打卡day52
  • UE5制作与云渲染配置不足?3090/4090显卡云端解放创作力
  • 基于sample_aiisp例子,创建3路编码流,记录
  • 奥威BI:用AI重新定义数据分析,中小企业数字化转型的智能引擎
  • 力扣HOT100之技巧:31. 下一个排列
  • CMS软件以及常见分类
  • excel中自定义公式
  • 基于 Nginx 服务器的泛域名 SSL 证书申请与部署
  • 腾讯云:6月30日起,自动禁用,及时排查
  • keil5怎么关闭工程
  • JavaScript中的迭代器模式:优雅遍历数据的“设计之道”
  • React---Hooks深入
  • vue3 全局过滤器
  • 【Docker 04】image - 镜像
  • 《一本书看透A股》速读笔记
  • Python----神经网络发(神经网络发展历程)
  • 水库大坝安全监测之渗流监测
  • 理解LLM所谓的“推理”能力
  • Vim 命令大全:从入门到精通
  • Flutter 小技巧之:实现 iOS 26 的 “液态玻璃”
  • Spring Cloud Gateway 动态路由实现方案
  • Android NTP自动同步时间机制
  • 记录一个大模型逐层微调计算损失输出少了一个维度的小bug