C++笔记之单例模式

C++笔记之单例模式

参考笔记:C++笔记之call_once和once_flag
code review

文章目录

  • C++笔记之单例模式
    • 1.返回实例引用
    • 2.返回实例指针
    • 3.单例和智能指针share_ptr结合
    • 4.单例和std::call_once结合
    • 5.单例和std::call_once、unique_ptr结合

1.返回实例引用

在这里插入图片描述

代码

#include <iostream>class Singleton {public:static Singleton &getInstance() {static Singleton instance;return instance;}void printMessage() {std::cout << "hello world!" << std::endl;}private:Singleton() {}                          // 禁止外部创建实例Singleton(const Singleton &);           // 禁止复制实例Singleton operator=(const Singleton &); // 禁止赋值实例
};int main() {Singleton &instance = Singleton::getInstance();instance.printMessage();return 0;
}

2.返回实例指针

在这里插入图片描述

代码

#include <iostream>class Singleton {public:static Singleton *getInstance() {if (instance == nullptr) {instance = new Singleton();}return instance;}void printMessage() {std::cout << "hello world!" << std::endl;}private:static Singleton *instance;Singleton() {}                          // 禁止外部创建实例Singleton(const Singleton &);           // 禁止复制实例Singleton operator=(const Singleton &); // 禁止赋值实例
};Singleton *Singleton::instance = nullptr;int main() {Singleton *instance = Singleton::getInstance();instance->printMessage();return 0;
}

3.单例和智能指针share_ptr结合

在这里插入图片描述

代码

#include <iostream>
#include <memory>class Singleton {public:static std::shared_ptr<Singleton> getInstance() {if (!instance) {instance = std::shared_ptr<Singleton>(new Singleton());}return instance;}void printMessage() {std::cout << "hello world!" << std::endl;}private:Singleton() {}                          // 禁止外部创建实例Singleton(const Singleton &);           // 禁止复制实例Singleton operator=(const Singleton &); // 禁止赋值实例static std::shared_ptr<Singleton> instance;
};std::shared_ptr<Singleton> Singleton::instance = nullptr;int main() {std::shared_ptr<Singleton> instance = Singleton::getInstance();instance->printMessage();return 0;
}

4.单例和std::call_once结合

在这里插入图片描述

编译运行:
在这里插入图片描述

代码

#include <iostream>
#include <mutex>class Singleton {
public:static Singleton *getInstance() {std::call_once(initFlag, [](){instance = new Singleton();});return instance;}void printMessage() {std::cout << "hello world!" << std::endl;}private:static Singleton *instance;static std::once_flag initFlag;Singleton() {} // 禁止外部创建实例Singleton(const Singleton &); // 禁止复制实例Singleton operator=(const Singleton &); // 禁止赋值实例
};Singleton *Singleton::instance = nullptr;
std::once_flag Singleton::initFlag;int main() {Singleton *instance = Singleton::getInstance();instance->printMessage();return 0;
}

5.单例和std::call_once、unique_ptr结合

在这里插入图片描述

编译运行
在这里插入图片描述

代码

#include <iostream>
#include <mutex>
#include <memory>class Singleton {
public:static Singleton *getInstance() {std::call_once(initFlag, [](){instance.reset(new Singleton());});return instance.get();}void printMessage() {std::cout << "hello world!" << std::endl;}private:static std::unique_ptr<Singleton> instance;static std::once_flag initFlag;Singleton() {} // 禁止外部创建实例Singleton(const Singleton &); // 禁止复制实例Singleton operator=(const Singleton &); // 禁止赋值实例
};std::unique_ptr<Singleton> Singleton::instance;
std::once_flag Singleton::initFlag;int main() {Singleton *instance = Singleton::getInstance();instance->printMessage();return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/32866.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ubuntu 如何命令行打开系统设置(Wifi,网络,应用程序...)

关于GNOME GNOME 是一个自由、开放源代码的桌面环境&#xff0c;它运行在 Linux 和其他类 UNIX 操作系统上。它是 GNU 项目的一部分&#xff0c;旨在为 Linux 操作系统提供一个现代化、易于使用的用户界面。 GNOME 桌面环境包括许多应用程序&#xff0c;例如文件管理器、文本编…

侯捷 C++ part2 兼谈对象模型笔记——5 三个C++11新特性

5 三个C11新特性 5.1 variadic templates 模板参数可变化&#xff0c;其语法为 ... (加在哪看情况) // 当参数pack里没有东西了就调用这个基本函数结束输出 void print() { }// 用于打印多个参数的可变参数模板函数 template <typename T, typename... Args> void pri…

SQL Developer中的Data Redaction

SQL Developer中的Data Redaction用起来比命令行方便多了。可以选定表或视图&#xff0c;右键点击“遮盖保护”菜单。 但赋权方面有需要注意的地方。 假设Redact Admin是SYS&#xff0c;Redact User是HR。虽然SYS具备所有权限&#xff0c;但还是报以下错误。其实这个错误是针…

湖南科技学院图书馆藏八一新书《乡村振兴战略下传统村落文化旅游设计》

湖南科技学院图书馆藏八一新书《乡村振兴战略下传统村落文化旅游设计》

Chrome浏览器导出插件并安装到其他电脑浏览器上的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

Python-OpenCV中的图像处理-直方图

Python-OpenCV中的图像处理-直方图 直方图统计直方图绘制直方图Matplotlib绘制灰度直方图Matplotlib绘制RGB直方图 使用掩膜统计直方图直方图均衡化Numpy图像直方图均衡化OpenCV中的直方图均衡化CLAHE 有限对比适应性直方图均衡化 2D直方图OpenCV中的2D直方图Numpy中2D直方图 直…

使用 ESP32 Arduino 和机器学习实现WIFI室内定位

在这个 Arduino 机器学习项目中,我们将使用附近的 WiFi 接入点来定位我们所在的位置。为了使该项目正常运行,您需要一块配备 WiFi 的板,例如 ESP8266、ESP32 或 MKR WiFI 1010。 什么是室内定位? 我们都习惯了 GPS 定位,我们的设备将使用卫星来跟踪我们在地球上的位置。GP…

数学建模—分类模型

本讲将介绍分类模型。对于而分类模型&#xff0c;我们将介绍逻辑回归&#xff08;logistic regression&#xff09;和Fisher线性判别分析两种分类算法&#xff1b;对于多分类模型&#xff0c;我们将简单介绍Spss中的多分类线性判别分析和多分类逻辑回归的操作步骤下。 本题按水…

Paddle OCR V4 测试Demo

效果 项目 VS2022.net4.8OCRV4 代码 using OpenCvSharp; using Sdcb.PaddleInference; using Sdcb.PaddleOCR; using Sdcb.PaddleOCR.Models; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; usin…

Springboot开发常用注解

文章目录 1.RestController2.Data3.RequestMapping4.Builder 1.RestController RestController注解其实就是将 return 中的内容以 JSON字符串的形式返回客户端 controller的详解 2.Data Data详解 3.RequestMapping RequestMapping 4.Builder Builder

【Wamp】安装 | 局域网内设备访问

安装教程&#xff1a; https://wampserver.site/article/1.html 下载 https://www.wampserver.com/en/ 安装路径上不能有中文 安装好之后图标呈绿色 放入网页文件 将网页文件放置于wamp文件夹的www子文件夹 例如&#xff1a;\Wamp\program\www 修改http端口 WAMP服务器…

编写简单的.gitlab-ci.yml打包部署项目

服务器说明&#xff1a; 192.168.192.120&#xff1a;项目服务器 192.168.192.121&#xff1a;GitLab 为了可以使用gitlab的cicd功能&#xff0c;我们需要先安装GitLab Runner 安装GitLab Runner参考&#xff1a; GitLab实现CICD自动化部署_gitlab cidi_程序员xiaoQ的博客-CS…

【MFC】05.MFC六大机制:程序启动机制-笔记

MFC程序开发所谓是非常简单&#xff0c;但是对于我们逆向人员来说&#xff0c;如果想要逆向MFC程序&#xff0c;那么我们就必须了解它背后的机制&#xff0c;这样我们才能够清晰地逆向出MFC程序&#xff0c;今天这篇文章就来带领大家了解MFC的第一大机制&#xff1a;程序启动机…

AI:02-基于深度学习的动物图像检索算法的研究

文章目录 一、算法原理二、代码实现三、实验结果四、总结深度学习在计算机视觉领域中的应用越来越广泛,其中动物图像检索算法是一个重要的应用场景。本文将介绍一种基于深度学习的动物图像检索算法,并提供相应的代码实现。 一、算法原理 本算法采用卷积神经网络(Convolutio…

数据安全加固:深入解析滴滴ES安全认证技术方案

前文分别介绍了滴滴自研的ES强一致性多活是如何实现的、以及如何提升ES的性能潜力。由于ES具有强大的搜索和分析功能&#xff0c;同时也因其开源和易于使用而成为黑客攻击的目标。近些年&#xff0c;业界ES数据泄露事件频发, 以下是一些比较严重的数据泄露案件&#xff1a; 202…

Golang函数以及函数和方法的区别

在接触到go之前&#xff0c;我认为函数和方法只是同一个东西的两个名字而已&#xff08;在我熟悉的c/c&#xff0c;python&#xff0c;java中没有明显的区别&#xff09;&#xff0c;但是在golang中者完全是两个不同的东西。官方的解释是&#xff0c;方法是包含了接收者的函数。…

基于Dlib库+SVM+Tensorflow+PyQT5智能面相分析-机器学习算法应用(含全部工程源码)+训练及测试数据集

目录 前言总体设计系统整体结构图系统流程图模型流程 运行环境Python 环境TensorFlow环境界面编程环境 模块实现1. 数据预处理2. 模型构建1&#xff09;定义模型结构2&#xff09;交叉验证模型优化 3. 模型训练及保存4. 模型测试1&#xff09;摄像头调用2&#xff09;模型导入及…

springboot工程集成前端编译包,用于uni-app webView工程,解决其需独立部署带来的麻烦,场景如页面->画布->图片->pdf

前端工程 访问方式 http://127.0.0.1:8080/context/frontEnd/index放行 public class SecurityConfig extends WebSecurityConfigurerAdapter { "/frontEnd/**",SysFrontEndController import lombok.extern.slf4j.Slf4j; import nl.basjes.shaded.org.springfram…

分类预测 | MATLAB实现SMA-CNN-BiLSTM-Attention多输入分类预测

分类预测 | MATLAB实现SMA-CNN-BiLSTM-Attention多输入分类预测 目录 分类预测 | MATLAB实现SMA-CNN-BiLSTM-Attention多输入分类预测分类效果基本介绍模型描述程序设计参考资料 分类效果 基本介绍 1.MATLAB实现SMA-CNN-BiLSTM-Attention多输入分类预测&#xff0c;CNN-BiLSTM结…

解决android studio妙明奇妙出现的模拟器

1&#xff0c;查看设备 adb devices 2&#xff0c; adb命令断开指定的设备 要断开ADB与特定设备的连接&#xff0c;可以使用以下命令&#xff1a; adb disconnect <设备ID> 将 <设备ID> 替换为您要断开连接的设备的实际ID。设备ID可以在运行 adb devices 命令…