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

前言

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

正文

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

cpp 复制代码
//Singleton.h
#ifndef SINGLETON_H
#define SINGLETON_H

#include <QWidget>

QT_BEGIN_NAMESPACE
namespace Ui { class Singleton; }
QT_END_NAMESPACE

class Singleton : public QWidget
{
    Q_OBJECT

public:
    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 的静态局部变量机制,该变量在线程首次访问时初始化,自动保证线程安全,代码简洁且高效。

使用

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

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

内存管理

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

小结

相关推荐
HL_LOVE_C3 分钟前
全面理解-回调函数CallBack
开发语言·c++
Distance失落心8 分钟前
java基于数组实现队列(四)
java·开发语言·数据结构·算法·面试·java-ee·intellij-idea
blog_wanghao18 分钟前
C#: 日志函数
开发语言·c#·日志
weixin_3077791322 分钟前
PySpark实现GROUP BY WITH CUBE和WITH ROLLUP的分类汇总功能
大数据·开发语言·python·spark
信徒_31 分钟前
go 语言中的线程池
开发语言·后端·golang
Pandaconda31 分钟前
【Golang 面试题】每日 3 题(六十五)
开发语言·经验分享·笔记·后端·面试·golang·go
至暗时刻darkest32 分钟前
go 查看版本
开发语言·后端·golang
向哆哆1 小时前
Java与NoSQL数据库的集成与优化
java·开发语言·nosql
MSTcheng.1 小时前
【C语言】指针(5)
c语言·开发语言
╮壞孩子的天1 小时前
C语言多人聊天室 ---chat(客户端聊天)
c语言·开发语言