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

C/C++学习——单例模式(懒汉模式与饿汉模式)

C/C++学习——单例模式

  • 一、什么是单例模式?
  • 二、单例模式应用
  • 三、单例模式的特点
    • 注意:静态成员变量的使用
    • 示例代码:
  • 四、单例模式C++代码示例(饿汉模式)
  • 五、单例模式C++示例代码(懒汉模式)

一、什么是单例模式?

单例模式(Singleton Pattern)是一种创建型设计模式,用于确保在应用程序的生命周期内只存在一个特定类的唯一实例。这意味着无论何时请求该类的实例,都将返回同一个实例,而不会创建多个相同的对象。

二、单例模式应用

资源共享:当多个对象需要共享同一个资源,如数据库连接、文件系统、日志记录器等时,使用单例模式可以确保只有一个实例在管理这些资源,避免资源冲突和浪费。

全局控制:某些类负责管理全局的配置或状态信息。通过单例模式,可以确保在整个应用程序中只有一个配置管理器或状态管理器。

惰性初始化:某些对象的创建和初始化可能会很昂贵,只有在需要时才应该进行。单例模式允许延迟对象的创建,直到第一次请求它。

避免重复操作:有时需要确保只有一个对象负责某种操作,以避免重复执行。

三、单例模式的特点

私有的构造函数:单例类的构造函数必须是私有的,以防止外部代码直接实例化对象。

静态成员变量:通常单例类包含一个私有的静态成员变量,用于保存唯一实例的引用。

静态成员函数:通常单例类包含一个静态成员函数,用于获取唯一实例。这个函数通常会在内部检查是否已经创建了实例,如果没有,则创建一个新的实例并返回。

**

注意:静态成员变量的使用

**(静态成员变量是类的一部分,并不是类的实例的一部分同时静态成员函数不需要使用类的实例来调用,可以直接通过类名来调用

示例代码:

#include <iostream>
class Myclass
{
public:static void myPrint(); //静态成员函数声明
};
void Myclass::myPrint() //静态成员函数声明
{std::cout << "测试静态成员函数!\n" << std::endl;
}void test_1()
{/*静态成员函数是类的一部分,但不是类的实例的一部分;静态成员函数不需要使用类的实例来调用,可以直接通过类名来调用*/Myclass::myPrint();
}int main()
{test_1();return 0;
}

四、单例模式C++代码示例(饿汉模式)

结果:在没有使用该类的情况下也会实例化对象。

#include <iostream>//单例模式实现 示例
class Singleton
{private:static Singleton _eton; //静态成员变量_eton的声明,这里并没有定义//构造函数Singleton():_data(99) {std::cout << "单例模式构造!\n";}//删除拷贝构造,C++11特性Singleton(const Singleton&) =delete; //析构函数~Singleton(){}private:int _data;//对外提供的接口public:static Singleton &getInstance(){return _eton;}int getData(){return _data;}
};Singleton Singleton::_eton; //静态成员函数的定义int main()
{std::cout << Singleton::getInstance().getData() <<std::endl;return 0;
}

五、单例模式C++示例代码(懒汉模式)

懒汉模式:第一次使用要使用单例对象的时候创建实例对象。如果单例对象构造特别耗时或者耗费资源(加载插件、加载网络资源等),可以选择懒汉模式,在第一次使用的时候才创建对象

#include <iostream>class Singleton
{private:Singleton():_data(90){std::cout << "单例对象构造!\n" << std::endl;}Singleton(const Singleton&) = delete;~Singleton(){}private:int _data;public:static Singleton &getInstance(){static Singleton _eton;return _eton;}int getData(){return _data;}
};int main()
{std::cout << Singleton::getInstance().getData() << std::endl; //只有在实例化对象的时候才可以调用return 0;
}

相关文章:

C/C++学习——单例模式(懒汉模式与饿汉模式)

C/C学习——单例模式 一、什么是单例模式&#xff1f;二、单例模式应用三、单例模式的特点注意&#xff1a;静态成员变量的使用示例代码&#xff1a; 四、单例模式C代码示例&#xff08;饿汉模式&#xff09;五、单例模式C示例代码&#xff08;懒汉模式&#xff09; 一、什么是…...

企业微信网页开发本地调试方式

一、开启企业微信调试模式 首先在企业微信打开一个网页应用时&#xff0c;其实就是打开了一个微信环境的浏览器&#xff0c;此时想要检查网页元素&#xff0c;查看请求接口&#xff0c;需要开启调试模式。企业微信默认是不支持调试的&#xff0c;需要再单独下载一个文件放在安…...

Prompt GPT推荐社区

大家好&#xff0c;我是荷逸&#xff0c;这次给大家带来的是我日常学习Prompt社区推荐 Snack Prompt 访问地址&#xff1a;http://snackprompt.com Snack Prompt是一个采用的Prompts诱导填空式的社区&#xff0c;它提供了一种简单的prompt修改方式&#xff0c;你只需要输入关…...

小程序隐私保护授权处理方式之弹窗组件

欢迎点击关注-前端面试进阶指南&#xff1a;前端登顶之巅-最全面的前端知识点梳理总结 *分享一个使用比较久的&#x1fa9c; 小程序隐私保护授权弹窗组件 调用wx.getUserProfile进行授权时&#xff0c;返回错误信息&#xff1a;{errMsg: “getUserProfile:fail api scope is…...

Java 复习笔记 - 方法篇

文章目录 一&#xff0c;方法的定义二&#xff0c;最简单的方法定义和调用三&#xff0c;带参数的方法定义和调用四&#xff0c;带返回值方法的定义和调用五&#xff0c;小结六&#xff0c;方法的重载七&#xff0c;方法简单练习1&#xff0c;数组遍历2&#xff0c;数组最大值3…...

大数据到底是好是坏?_光点科技

近年来&#xff0c;随着科技的不断发展和互联网的普及&#xff0c;大数据已经成为一个备受关注的话题。它带来了许多机遇和挑战&#xff0c;引发了人们对于其是好是坏的争议。大数据究竟是一把双刃剑&#xff0c;需要我们从多个角度来审视。 大数据的好处无疑是显而易见的。首先…...

C++ while 循环

只要给定的条件为真&#xff0c;while 循环语句会重复执行一个目标语句。 语法 C 中 while 循环的语法&#xff1a; while(condition) {statement(s); }在这里&#xff0c;statement(s) 可以是一个单独的语句&#xff0c;也可以是几个语句组成的代码块。condition 可以是任意…...

orm_sqlalchemy总结

sqlalchemy使用总结 1 sqlalchemy ORM基础操作 官方文档&#xff1a;https://docs.sqlalchemy.org/en/13/orm/tutorial.html 创建连接 - 创建基类 - 创建实体类 - 创建表 - 创建session import logging import pymysql from pymysql.cursors import DictCursor import sqla…...

CTFhub-文件上传-MIME绕过

用哥斯拉生成 php 木马文件 1.php 抓包---> 修改 conten-type 类型 为 imge/jpeg 用蚁剑连接 ctfhub{8e6af8109ca15932bad4747a}...

【校招VIP】前端校招考点之UDP

考点介绍&#xff1a; UDP是非面向连接协议&#xff0c;使用udp协议通讯并不需要建立连接&#xff0c;它只负责把数据尽可能发送出去&#xff0c;并不可靠&#xff0c;在接收端&#xff0c;UDP把每个消息断放入队列中&#xff0c;接收端程序从队列中读取数据。 『前端校招考点…...

C++设计模式_02_面向对象设计原则

文章目录 1. 面向对象设计&#xff0c;为什么&#xff1f;2. 重新认识面向对象3. 面向对象设计原则3.1 依赖倒置原则(DIP)3.2 开放封闭原则(OCP )3.3 单一职责原则( SRP )3.4 Liskov 替换原则 ( LSP )3.5 接口隔离原则 ( ISP )3.6 优先使用对象组合&#xff0c;而不是类继承3.7…...

springcloud-gateway简述

Spring Cloud Gateway 是一个用于构建 API 网关的项目&#xff0c;它是 Spring Cloud 生态系统中的一部分&#xff0c;旨在为微服务架构提供动态路由、负载均衡、安全性和监控等功能。 网关工程对应pom文件 <?xml version"1.0" encoding"UTF-8"?>…...

【大虾送书第七期】深入浅出SSD:固态存储核心技术、原理与实战

目录 ✨写在前面 ✨内容简介 ✨作者简介 ✨名人推荐 ✨文末福利 &#x1f990;博客主页&#xff1a;大虾好吃吗的博客 &#x1f990;专栏地址&#xff1a;免费送书活动专栏地址 写在前面 近年来国家大力支持半导体行业&#xff0c;鼓励自主创新&#xff0c;中国SSD技术和产业…...

常见矿石材质鉴定VR实训模拟操作平台提高学员的学习效果和实践能力

随着“元宇宙”概念的不断发展&#xff0c;在矿山领域中&#xff0c;长期存在传统培训内容不够丰富、教学方式单一、资源消耗大等缺点&#xff0c;无法适应当前矿山企业发展需求的长期难题。元宇宙企业借助VR虚拟现实、web3d开发和计算机技术构建的一个虚拟世界&#xff0c;为用…...

Verilog 学习路线

参考知乎 首先得学习数电和 Verilog 基础。 常问的 Verilog 基础 二分频是怎么写的 阻塞和非阻塞及其应用 写一个100MHz的时钟 Reg 和 wire 的区别 Logic 和 wire 的区别&#xff0c;两者可以转换吗 用你最擅长的语言找出1-100的质数 一个最简单的八位加法器应该怎么验…...

前端三剑客中简单的两个:HTMLCSS

HTML&CSS 1&#xff0c;HTML1.1 介绍1.2 快速入门1.3 基础标签1.3.1 标题标签1.3.2 hr标签1.3.3 字体标签 1.4 图片、音频、视频标签1.5 超链接标签1.6 列表标签1.7 表格标签1.8 布局标签1.9 表单标签1.9.1 表单标签概述1.9.2 form标签属性1.9.3 代码演示 1.10 表单项标签 …...

Java实现根据关键词搜索当当商品列表数据方法,当当API接口申请指南

要通过当当网的API获取商品列表数据&#xff0c;您可以使用当当开放平台提供的接口来实现。以下是一种使用Java编程语言实现的示例&#xff0c;展示如何通过当当开放平台API获取商品列表&#xff1a; 首先&#xff0c;确保您已注册成为当当开放平台的开发者&#xff0c;并创建…...

【HBZ分享】TCP可靠性传输如何保证的?

ACK机制 ACK机制是发送方与接收方的一个相互确认客户端向服务端发送连接请求&#xff0c;此时服务端要回馈给客户端ACK&#xff0c;以表示服务端接到了客户端请求&#xff0c;这是第一和的第二次握手客户端接收到服务端响应后&#xff0c;同样也要回馈服务端的响应&#xff0c…...

AI聊天机器人平台Poe发布更新;自然语言理解课程概要

&#x1f989; AI新闻 &#x1f680; AI聊天机器人平台Poe发布更新 突破功能限制 增加企业级服务 摘要&#xff1a;知名问答网站Quora旗下的AI聊天机器人平台Poe发布了一系列更新&#xff0c;包括推出Mac应用、支持同时进行多个对话、接入Meta的Llama 2模型等功能。用户只需支…...

电脑视频编辑软件前十名 电脑视频编辑器怎么剪辑视频

对于大多数创作者而言&#xff0c;视频后期工作基本都是在剪辑软件上进行的。一款适合自己的视频剪辑软件&#xff0c;能够节省出大量的时间和金钱成本&#xff0c;让剪辑师省钱又省心。那么有关电脑视频编辑软件前十名&#xff0c;电脑视频编辑器怎么剪辑视频的相关问题&#…...

新手入门:在快马平台生成代码,理解智能应用控制警告的模拟实现

今天想和大家分享一个特别适合编程新手的小项目——通过HTML和JavaScript模拟"智能应用控制"的安全警告弹窗。这个练习不仅能帮助我们理解现代操作系统中的安全机制&#xff0c;还能学到实用的前端开发技巧。 项目背景理解 智能应用控制是现代操作系统的一项重要安全…...

golang如何实现零知识证明基础_golang零知识证明基础实现教程

Go 不内置零知识证明能力&#xff0c;需依赖第三方库&#xff1b;主流ZKP工具链绑定Rust/C/TS&#xff0c;Go生态缺乏生产级原生实现&#xff1b;crypto包仅提供基础原语&#xff0c;无法支撑ZKP所需多项式承诺、配对运算等高级密码操作。Go 本身不内置零知识证明&#xff08;Z…...

非参数回归实战:从理论到Python实现

1. 非参数回归&#xff1a;当数据拒绝被简单定义时 记得第一次接触回归分析时&#xff0c;老师用"用直线拟合数据点"来解释线性回归。但当我把这个方法用在实际项目中时&#xff0c;发现很多数据根本不像教科书里画的那样规整。那些弯弯曲曲的数据点&#xff0c;像是…...

2.2.2.1 搭建Spark单机版环境

本次实战旨在Linux环境下完成Spark单机版环境的搭建。首先确保JDK已正确安装&#xff0c;随后获取Spark安装包并上传至服务器指定目录。接着&#xff0c;将安装包解压至系统路径&#xff0c;并通过修改配置文件设置环境变量&#xff0c;使系统能够识别Spark命令。最后&#xff…...

停止学习新语言!2026年技术人的反内耗宣言

一、技术内耗的困局&#xff1a;语言焦虑与效率陷阱2026年的技术圈&#xff0c;Python稳居TIOBE榜首&#xff0c;Rust强势崛起&#xff0c;TypeScript重构前端生态……语言迭代的速度远超人类学习极限。测试从业者深陷三重内耗漩涡&#xff1a;工具链绑架&#xff1a;70%自动化…...

智能抢号引擎:5分钟实现资源预约自动化的高效解决方案

智能抢号引擎&#xff1a;5分钟实现资源预约自动化的高效解决方案 【免费下载链接】91160-cli 健康160全自动挂号脚本 项目地址: https://gitcode.com/gh_mirrors/91/91160-cli 在数字化时代&#xff0c;热门资源的抢订总是充满挑战——无论是限量课程报名、热门活动预约…...

Qwen-Image-Edit-2511-Unblur-Upscale惊艳效果:模糊图片一键高清化

Qwen-Image-Edit-2511-Unblur-Upscale惊艳效果&#xff1a;模糊图片一键高清化 1. 效果展示&#xff1a;从模糊到高清的魔法 你是否遇到过这样的情况&#xff1f;手机里珍藏的老照片因为年代久远变得模糊不清&#xff0c;或是匆忙拍摄的珍贵瞬间因为手抖而糊成一片。现在&…...

三菱现代自动擦窗机器人PLC软件:后发产品介绍及技术细节

三菱 现代自动擦窗机器人PLC软件 我们主要的后发送的产品有&#xff0c;带解释的梯形图接线图原理图图纸&#xff0c;io分配&#xff0c;组态画面 界面多种组态可供选择上周刚帮一个三菱现代贴牌擦窗机的小客户把新软件迭代完&#xff0c;顺便攒了一套带人话解释的梯形图、不…...

AI人体骨骼关键点检测:5分钟快速部署,33个关节点一键可视化

AI人体骨骼关键点检测&#xff1a;5分钟快速部署&#xff0c;33个关节点一键可视化 1. 引言&#xff1a;快速体验人体姿态检测 人体骨骼关键点检测技术正在改变我们与计算机交互的方式。想象一下&#xff0c;你的电脑能够实时理解你的每一个动作——从简单的举手到复杂的舞蹈…...

linux系统中简单统计java项目代码行数信息

新建脚本文件&#xff08;最好在项目根目录下&#xff09;&#xff1a;count_java.shvi count_java.sh编辑内容&#xff1a;按一下键盘上的i键&#xff0c;屏幕左下角会出现 -- INSERT --&#xff0c;输入一下内容&#xff1a; #!/bin/bash find . -name "*.java" -p…...