单例模式的学习

示例:

#ifndef TEST_H
#define TEST_Hclass test
{
public:static test * GetINSTANCE();void print();
private:test();
};#endif // TEST_H
#include "test.h"
#include <QMutex>
#include <QDebug>
test::test()
{}test *test::GetINSTANCE()
{static test * inst = nullptr;static QMutex mutex;mutex.lock();if(!inst){inst = new test;}mutex.unlock();return inst;
}void test::print()
{static int m = 0;m++;qDebug()<<__FILE__<<"["<<__LINE__<<"]"<< m;
}

补充:

这样写也可以:

    static T * GetINSTANCE(){static QScopedPointer<T> inst;static QMutex mutex;mutex.lock();if(!inst){inst.reset(new T());}mutex.unlock();return inst.data();}
    test::GetINSTANCE()->print();test::GetINSTANCE()->print();test::GetINSTANCE()->print();

..\try\test.cpp [ 26 ] 1

..\try\test.cpp [ 26 ] 2

..\try\test.cpp [ 26 ] 3

使用类模板进行简单的优化,使代码扩展性更好一些:

#ifndef TEST_H
#define TEST_H#include <QMutex>template<typename T>
class Singleton
{
public:static T * GetINSTANCE(){static T * inst = nullptr;static QMutex mutex;mutex.lock();if(!inst){inst = new T();}mutex.unlock();return inst;}
protected:Singleton() = default;
};class test:public Singleton<test>
{friend class Singleton<test>;
public:void print();
private:test() = default;
};
#endif // TEST_H
#include "test.h"
#include <QDebug>void test::print()
{static int m = 0;m++;qDebug()<<__FILE__<<"["<<__LINE__<<"]"<< m;
}
    test::GetINSTANCE()->print();test::GetINSTANCE()->print();test::GetINSTANCE()->print();

..\try\test.cpp [ 11 ] 1

..\try\test.cpp [ 11 ] 2

..\try\test.cpp [ 11 ] 3

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

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

相关文章

NPU 与 GPU 相比,有什么差别?| 技术速览

编者按&#xff1a; 随着2024年被业界誉为“AI PC元年”&#xff0c;各大笔记本电脑厂商纷纷推出搭载NPU的全新AI PC&#xff0c;而在介绍产品性能时&#xff0c;“NPU”一词频频被提及。但NPU和我们所熟知的GPU之间的区别究竟是什么&#xff1f; 我们今天为大家分享的这篇文章…

电水壶自复位热断循环测试合规性

在家用电器安全标准中,电水壶的安全性尤为重要,尤其是涉及热保护装置的部分。电水壶在日常使用中频繁接触高温水,极端情况下,温度可能异常升高。因此,为了确保用户的安全,热保护装置必须可靠工作。本文将探讨自复位热断路器(TCO)在电水壶中的作用,以及在100次循环测试…

如何在 Selenium 中获取网络调用请求?

引言 捕获网络请求对于理解网站的工作方式以及传输的数据至关重要。Selenium 作为一种 Web 自动化工具,可以用于捕获网络请求。本文将讨论如何使用 Selenium 在 Java 中捕获网络请求并从网站检索数据。 我们可以使用浏览器开发者工具轻松捕获网络请求或日志。大多数现代 Web…

Jupyter管理内核命令

1.显示有哪些内核 jupyter kernelspec list2.删除某个内核 jupyter kernelspec remove xxx3.添加某个内核 先激活环境 conda activate test_env然后安装ipykernel包 pip install ipykernel在虚拟环境中安装ipykernel包 python -m ipykernel install --name test_env安装过…

creating chat agent with langchain and openai getting no attribute error

题意&#xff1a; 使用 LangChain 和 OpenAI 创建聊天代理时遇到“没有属性错误”&#xff08;Getting "no attribute" error when creating a chat agent with LangChain and OpenAI&#xff09; 问题背景&#xff1a; Im trying to test a chat agent using the …

房产销售系统|基于java和vue的房产销售系统(源码+数据库+文档)

房产销售|房地产|卖房系统 目录 基于java和vue的房产销售系统 一、前言 二、系统设计 三、系统功能设计 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#xff1a;✌️大厂码农|毕设布道师&#xff0c;…

【hot100】力扣hot100部分题解

1.和为k的子数组 题目链接 注意&#xff1a;题目是连续的子数组。 因为数据有负数&#xff0c;用滑动窗口不太好做。 所以用数组前缀和。 数组前缀和就是从第1位到当前位的子数组的和。 每次遍历更新到当前位之前的前缀和&#xff0c;以对象的形式存储&#xff08;key为前缀和&…

【0323】Postgres内核之 hash table sequentially search(seq_scan_tables、num_seq_scans)

0. seq scan tracking 我们在这里跟踪活跃的 hash_seq_search() 扫描。 需要这种机制是因为如果扫描正在进行时发生桶分裂(bucket split),它可能会访问两次相同的条目,甚至完全错过某些条目(如果它正在访问同一个分裂的桶中的条目)。因此,如果正在向表中插入数据,我们…

95分App全程正品保障,赋能闲置消费新风尚

在当今快节奏、高消费的时代&#xff0c;闲置经济正以前所未有的速度崛起&#xff0c;成为新一代消费者的新宠。越来越多的年轻人开始拥抱闲置商品&#xff0c;将“断舍离”与“物尽其用”的理念融入日常生活&#xff0c;催生了闲置交易市场的空前繁荣。曾几何时&#xff0c;购…

【iOS】UIViewController的生命周期

UIViewController的生命周期 文章目录 UIViewController的生命周期前言UIViewController的一个结构UIViewController的函数的执行顺序运行代码viewWillAppear && viewDidAppear多个视图控制器跳转时的生命周期pushpresent 小结 前言 之前对于有关于UIViewControlller的…

OpenXR Monado创建跨进程通信通道 ipc_connect

OpenXR Monado创建跨进程通信通道 ipc_connect monado/src/xrt/targets/openxr/target.c xrt_instance_create monado/src/xrt/ipc/client/ipc_client_instance.cipc_instance_create(ii, out_xinst);ipc_connectipc_c->ica ipc_client_android_create(android_globals_ge…

补:在Spring Boot 当中使用 Thymeleaf 视图解析器

补&#xff1a;在Spring Boot 当中使用 Thymeleaf 视图解析器 想要在 Spring Boot 当中使用 Thymeleaf 视图&#xff0c;就需要导入相关的 jar 依赖。在 pom.xml 文件中配置 。 <!-- 引入 thymeleaf-start ,项目会自动完成配置&#xff0c;--><dependency>…

网络操作系统项目

部署与管理Active Directory 项目基础知识 活动目录是一种由微软开发的网络服务&#xff0c;用于在网络环境中管理和组织用户、计算机和其他网络资源。它是基于目录服务的概念&#xff0c;类似于电话号码簿。 活动目录主要用于集中管理网络中的用户帐户、组织单位、计算机、打…

统一建模语言UML之类图(Class Diagram)(表示|关系|举例)

文章目录 1.UML2.Class Diagram2.1 类图的表示2.2 类间的关系2.2.1 关联2.2.2 聚合2.2.3 组合2.2.4 泛化&#xff08;继承&#xff09;2.2.5 实现&#xff08;接口实现&#xff09;2.2.6 依赖 2.3 类图的作用 参考&#xff1a;Class Diagram | Unified Modeling Language (UML)…

使用 Watchdog 实现 Python 程序的自动重载

在开发 Python 程序时,特别是在开发图形用户界面(GUI)应用时,我们经常需要频繁修改代码并查看效果。每次修改后手动重启程序既耗时又繁琐。本文将介绍如何使用 Watchdog 库来实现 Python 程序的自动重载,大大提高开发效率。 什么是 Watchdog? Watchdog 是一个 Python 库…

大数据新视界 --大数据大厂之Flink强势崛起:大数据新视界的璀璨明珠

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

力扣---80. 删除有序数组中的重复项 II

给你一个有序数组 nums &#xff0c;请你 原地 删除重复出现的元素&#xff0c;使得出现次数超过两次的元素只出现两次 &#xff0c;返回删除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。 说明&…

electron react离线使用monaco-editor

1.安装monaco-editor/react和monaco-editor pnpm i monaco-editor/react pnpm i monaco-editor 2.引入并做monaco-editor离线配置 import Editor, { DiffEditor, useMonaco, loader } from monaco-editor/react import * as monaco from monaco-editor import editorWorke…

软考 -- 软件设计师 -- 二轮复习(3) -- 数据结构(持续更新)

软考 – 软件设计师 – 二轮复习(3) – 数据结构(持续更新) 文章目录 软考 -- 软件设计师 -- 二轮复习(3) -- 数据结构(持续更新)前言一、时间、空间复杂度二、递归式时间复杂度三、线性表四、栈五、栈和队列六、串七、朴素模式匹配八、KMP模式匹配九、数组十、矩阵十一、树、二…

C#基础(10)变长参数和参数默认值

前言 作为函数的补充知识点&#xff0c;我们已经学习了ref和out&#xff0c;接下来两节我们继续来讲函数相关的内容。本节则讲解变长参数和参数默认值。 函数语法 关键字&#xff1a;params public void PrintNumbers(params int[] numbers) {for 相关逻辑 } 注意 params…