欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 名人名企 > Qt:饿汉单例(附带单例使用和内存管理)

Qt:饿汉单例(附带单例使用和内存管理)

2024/12/1 0:29:18 来源:https://blog.csdn.net/m0_71489826/article/details/142285487  浏览:    关键词:Qt:饿汉单例(附带单例使用和内存管理)

前言

本文主要写饿汉单例以及单例的释放,网上很多教程只有单例的创建,但是并没有告诉我们单例的内存管理,这就很头疼。

正文

饿汉式单例

// SingletonClass.h
#ifndef SINGLETONCLASS_H
#define SINGLETONCLASS_H
#include <QObject>class SingletonClass: public QObject
{
public:static SingletonClass* getInstance();static void destorySingleton();
private:SingletonClass();// 禁止拷贝构造和赋值操作SingletonClass(const SingletonClass&) = delete;SingletonClass& operator=(const SingletonClass&) = delete;~SingletonClass();private:// 静态变量static SingletonClass* instance;
};#endif // SINGLETONCLASS_H// SingletonClass.cpp
#include "singletonclass.h"
#include "qdebug.h"// 饿汉单例,在类加载时就创建
SingletonClass* SingletonClass::instance = new SingletonClass();SingletonClass *SingletonClass::getInstance()
{return instance;
}void SingletonClass::destorySingleton()
{if (instance) {delete instance;instance = nullptr;}
}SingletonClass::SingletonClass()
{qDebug()<<"单例的创建;";
}SingletonClass::~SingletonClass()
{qDebug()<<"单例的销毁";
}

解释:

  • 饿汉式单例在程序启动时就创建实例,保证线程安全,适合需要频繁访问单例对象的场景。

使用

使用的正常的单例使用一样,可以参考我写的另一篇文章的使用

// 在UseSingleton类中的槽函数中添加
void UseSingleton::on_pushButton_clicked()
{SingletonClass* ins = SingletonClass::getInstance();/*其它处理逻辑*/// 销毁单例ins->destorySingleton();
}
运行结果

这样,刚启动程序的时候单例就会创建,当点击按钮的时候,单例就会被销毁。
在这里插入图片描述

内存管理

这里内存管理应该是只有两种方法了,一种是像我文中一样自己写一个单例的释放函数,还有一种自然就是使用智能指针了,这两种方法我在懒汉单例里面都有,这里就不写了。

注意

如果你的单例是继承自QWidget,那么你写饿汉单例的时候,尤其是new对象的时候大概率会报错,因为在类加载时直接创建单例实例;会导致QWidget先于QApplication创建,这个是不可以的。

小结

如有错误请指正。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com