Qt:静态局部变量实现单例(附带单例使用和内存管理)

devtools/2024/9/22 18:05:50/

前言

本文主要写静态局部变量实现的单例以及单例的释放,网上很多教程只有单例的创建,但是并没有告诉我们单例的内存管理,这就很头疼。静态局部变量实现的单例应该是最简单的单例,而且不需要内存管理。

正文

静态局部变量单例(C++11)

//Singleton.h
#ifndef SINGLETON_H
#define SINGLETON_H#include <QWidget>QT_BEGIN_NAMESPACE
namespace Ui { class Singleton; }
QT_END_NAMESPACEclass Singleton : public QWidget
{Q_OBJECTpublic:static Singleton* getInstance();private:// 私有化构造函数,防止外部创建实例Singleton(QWidget *parent = nullptr);// 禁止拷贝构造和赋值操作Singleton(const Singleton&) = delete;Singleton& operator=(const Singleton&) = delete;~Singleton();private:Ui::Singleton *ui;
};
#endif // SINGLETON_H//Singleton.cpp
#include "singleton.h"
#include "ui_singleton.h"
#include <QMutex>
#include "qdebug.h"
Singleton *Singleton::getInstance()
{ static Singleton instance;return &instance;
}
Singleton::Singleton(QWidget *parent): QWidget(parent), ui(new Ui::Singleton)
{ui->setupUi(this);qDebug()<<"单例创建成功";
}Singleton::~Singleton()
{qDebug()<<"单例安全销毁";delete ui;
}

解释:

  • 使用 C++11 的静态局部变量机制,该变量在线程首次访问时初始化,自动保证线程安全,代码简洁且高效。

使用

//UseSingleton.cpp
void UseSingleton::on_pushButton_clicked()
{instance = Singleton::getInstance();instance->show();
}
运行结果

点击创建按钮,单例被创建,窗口被关闭时单例并不会被销毁,因为静态变量的生命周期和程序是一样的,只有关闭程序单例才会被销毁。
在这里插入图片描述

内存管理

因为是栈上的变量,所以不需要内存管理。

小结


http://www.ppmy.cn/devtools/115580.html

相关文章

python --PyAibote自动化

官文: https://www.pyaibote.com/ 下载安卓集成环境: 可以看到开发的一些信息

【Python报错已解决】 Requests.exceptions.ProxyError: HTTPSConnectionPool

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 专栏介绍 在软件开发和日常使用中&#xff0c;BUG是不可避免的。本专栏致力于为广大开发者和技术爱好者提供一个关于BUG解决的经…

YOLOv8改进 | 特征融合篇,YOLOv8添加iAFF(多尺度通道注意力模块),并与C2f结构融合,提升小目标检测能力

摘要 特征融合,即来自不同层或分支的特征的组合,是现代网络架构中无处不在的一部分。虽然它通常通过简单的操作(如求和或拼接)来实现,但这种方式可能并不是最佳选择。在这项工作中,提出了一种统一且通用的方案,即注意力特征融合(Attentional Feature Fusion),适用于…

【Elasticsearch系列十九】评分机制详解

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

如何搭建ETL?

搭建一个ETL&#xff08;Extract, Transform, Load&#xff0c;提取、转换、加载&#xff09;流程&#xff0c;涉及从多个数据源提取数据、对数据进行清洗和转换、再将其加载到目标数据存储或数据仓库中。构建ETL的关键步骤包括规划、选择合适的工具、设计数据流以及执行和监控…

【Android】浅析MVC与MVP

【Android】浅析MVC与MVP 文章目录 【Android】浅析MVC与MVP什么是架构&#xff1f;MVC架构Model-View-ControllerModelViewController解决什么问题数据的流向MVC 模式的工作流程 MVC 架构模式的优缺点 MVP架构Model-View-Presenter解决什么问题数据流向MVC 和 MVP 的核心区别&…

Hive企业级调优[6]——HQL语法优化之任务并行度

目录 HQL语法优化之任务并行度 优化说明 Map端并行度 Reduce端并行度 优化案例 HQL语法优化之任务并行度 优化说明 对于分布式计算任务来说&#xff0c;设置一个合理的并行度至关重要。Hive的计算任务依赖于MapReduce框架来完成&#xff0c;因此并行度的调整需要从Map端和…

mac新手入门(快捷键)

系统常用快捷键 基本操作 Command-Z 撤销Shift-Command-Z&#xff1a;重做最近的撤销操作Command-X 剪切  Command-C 拷贝&#xff08;Copy&#xff09; Option Shift Command V 纯文本拷贝 Command-V 粘贴  Command-A 全选&#xff08;All&#xff09;Command-S 保…