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();
}
运行结果

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

内存管理

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

小结

相关推荐
Zevalin爱灰灰16 分钟前
Matlab simulink建模与仿真 第十六章(用户定义函数库)
开发语言·matlab
Zevalin爱灰灰22 分钟前
Matlab simulink建模与仿真 第十四章(信号输出库)
开发语言·matlab
汇匠源1 小时前
小程序服务零工市场
java·大数据·开发语言·小程序·团队开发·零工市场·零工市场小程序
王俊山IT1 小时前
C++学习笔记----7、使用类与对象获得高性能(二)---- 理解对象生命周期(7)
开发语言·c++·笔记·学习
弘毅_Hao2 小时前
Qt 构建目录
qt·构建目录
luthane2 小时前
python 实现bailey borwein plouffe算法
开发语言·python·算法
大侠之运维2 小时前
在excel中使用python?
开发语言·python·excel
感谢地心引力2 小时前
【matlab】将程序打包为exe文件(matlab r2023a为例)
开发语言·matlab
蓝色洛特2 小时前
【Matlab 肌电信号分析】
开发语言·matlab·信号处理·肌电信号
ljp_nan2 小时前
Qt --- 常用控件的介绍 --- 其他控件
开发语言·qt