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

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

内存管理

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

小结

相关推荐
Lei_3359674 分钟前
[設計模式]設計模式的作用
设计模式
IT阳晨。1 小时前
【QT开发】交叉编译QT程序在ARMLinux平台上运行
c++·qt·交叉编译·armlinux·代码移植
CoderYanger1 小时前
前端基础——CSS练习项目:百度热榜实现
开发语言·前端·css·百度·html·1024程序员节
虾..1 小时前
C++ 哈希
开发语言·c++·哈希算法
liu****2 小时前
14.日志封装和线程池封装
linux·开发语言·c++
青青草原羊村懒大王2 小时前
python基础知识三
开发语言·python
将编程培养成爱好2 小时前
C++ 设计模式《统计辅助功能》
开发语言·c++·设计模式·访问者模式
fie88892 小时前
基于循环谱分析的盲源分离信号处理MATLAB
开发语言·matlab·信号处理
kgduu2 小时前
go-ethereum之rpc
开发语言·rpc·golang
yong99902 小时前
MATLAB倍频转换效率分析与最佳匹配角模拟
开发语言·前端·matlab