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

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

内存管理

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

小结

相关推荐
thisiszdy4 分钟前
<设计模式> 生产者-消费者模式
设计模式
pixelpilot15 分钟前
微软常用运行库directx修复工具(directx repair)2026版directx下载下载安装教程
java·开发语言·其他·microsoft
cany10007 分钟前
C++进阶 -- std::deque‌ 和 ‌std::list
开发语言·c++
曾几何时`8 分钟前
Go(二)Goroutine及GMP模型
开发语言·后端·golang
AD钙奶-lalala10 分钟前
kotlin反射
android·开发语言·kotlin
2301_7890156212 分钟前
Lnux权限
linux·开发语言·c++·权限
江湖中的阿龙13 分钟前
Go语言零基础入门教程(一)环境搭建与基础入门
开发语言·后端·golang
集成显卡8 小时前
Rust实战七 |基于带 colored 颜色文字控制台的批量文件删除工具
开发语言·后端·rust
刀法如飞9 小时前
AI时代:DDD领域驱动建模与Ontology语义建模的区别
java·设计模式·架构
比昨天多敲两行9 小时前
linux 线程概念与控制
java·开发语言·jvm