网站优化提升排名,理财网网站开发源码h5,crm管理系统哪个好用,wordpress建站企业站前言
本文主要写Q_GLOBAL_STATIC实现单例以及单例的释放#xff0c;网上很多教程只有单例的创建#xff0c;但是并没有告诉我们单例的内存管理#xff0c;这就很头疼。
正文
使用 Qt 的 Q_GLOBAL_STATIC
// Singleton.h
#ifndef SINGLETON_H
#define SINGLETON_H#includ…前言
本文主要写Q_GLOBAL_STATIC实现单例以及单例的释放网上很多教程只有单例的创建但是并没有告诉我们单例的内存管理这就很头疼。
正文
使用 Qt 的 Q_GLOBAL_STATIC
// Singleton.h
#ifndef SINGLETON_H
#define SINGLETON_H#include QWidget
#include qscopedpointer.hQT_BEGIN_NAMESPACE
namespace Ui { class Singleton; }
QT_END_NAMESPACEclass Singleton : public QWidget
{Q_OBJECTpublic:static Singleton* getInstance();// 注意这里构造函数不能设为私有要不然宏访问不了。// 或者你设为私有将QGlobalStatic设为友元Singleton(QWidget *parent nullptr);~Singleton();private:// 禁止拷贝构造和赋值操作Singleton(const Singleton) delete;Singleton operator(const Singleton) delete;
private:Ui::Singleton *ui;};
#endif // SINGLETON_H// Singleton.cpp
#include singleton.h
#include ui_singleton.h
#include qdebug.h
#include QGlobalStatic //需要添加这个头文件
// 使用 Q_GLOBAL_STATIC 宏定义全局单例对象
Q_GLOBAL_STATIC(Singleton, globalSingletonInstance)Singleton *Singleton::getInstance()
{return globalSingletonInstance;
}Singleton::Singleton(QWidget *parent): QWidget(parent), ui(new Ui::Singleton)
{ui-setupUi(this);qDebug()单例创建成功;
}Singleton::~Singleton()
{qDebug()单例安全销毁;delete ui;
}
解释
Q_GLOBAL_STATIC 是 Qt 提供的宏用于创建全局静态单例对象自动处理线程安全问题宏定义一个静态变量不需要我们管理内存问题适合在 Qt 程序中使用。
使用
void UseSingleton::on_pushButton_clicked()
{instance Singleton::getInstance();instance-show();
}运行结果
点击创建按钮单例被创建窗口被关闭时单例并不会被销毁因为静态变量的生命周期和程序是一样的只有关闭程序单例才会被销毁。
内存管理
使用这个宏来实现单例我觉得就是静态变量实现单例是一样的不需要内存管理
小结