Qt5.9中单例模式用法(饿汉模式、懒汉模式,C++语言)

本文介绍如何在Qt5.9中使用C++实现单例模式,包括饿汉模式和懒汉模式。饿汉模式在类加载时即创建实例,线程安全但可能导致内存浪费;懒汉模式在首次调用时创建实例,节省内存但多线程环境下需考虑同步。文中提供详细的创建步骤,并给出了一个实际应用例子,涉及类的设计、UI交互及内存管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文主要用Qt5.9的C++实现单例模式,分别有饿汉单例模式和懒汉单例模式。单例模式特点是拥有一个全局入口,能够实现唯一的实例对象。实现的核心思想是调用该类的静态成员函数,然后该静态成员函数返还一个指向该类的指针变量。具体的总结如下所述。

一、饿汉单例模式(博主用的是这个)

饿汉单例模式的优点是线程安全,可以用在多线程里面。缺点是在创建类时实例对象,浪费内存。具体的创建要点如下:(创建私有类实例对象,然后用一个公共函数接口调用该私有实例对象)

a1.首先新建一个c++类,基类选择QObject,命名为QHungrySingleton。

a2.将构造函数变为私有函数,避免new的时候构造一个实例!!!

a3.创建一个静态私有的QHungrySingleton的实例对象,如static QHungrySingleton *m_instance;

a4.创建一个公共的函数,调用上面创建的私有实例对象;

a5.实例对象时进行new,然后公共调用函数直接返回该对象指针。

调用时先加头文件,然后用如下方式调用:

QHungrySingleton::GetInstance()->hungrySingletonTest();

代码如下:

hungrysingleton.h

#ifndef HUNGRYSINGLETON_H
#define HUNGRYSINGLETON_H

#include <QObject>

class QHungrySingleton : public QObject
{
    Q_OBJECT
public:
    static QHungrySingleton* GetInstance();
    void hungrySingletonTest();

private:
    static QHungrySingleton *m_instance;
    QHungrySingleton();
};

#endif // HUNGRYSINGLETON_H

 

hungrysingleton.cpp

#include "hungrysingleton.h"
#include <QDebug>

QHungrySingleton *QHungrySingleton::m_instance = new QHungrySingleton();

QHungrySingleton *QHungrySingleton::GetInstance()
{
    return m_instance;
}

void QHungrySingleton::hungrySingletonTest()
{
    qDebug()<<tr("调用了饿汉单例模式!!!");
}

QHungrySingleton::QHungrySingleton()
{

}

 

二、懒汉单例模式(定义时跟饿汉模式一样,实例有点区别)

懒汉单例模式的有点是在调用类时实例对象,节省内存。缺点是线程不安全,用在多线程时需要加锁。当用懒汉单例模式用于多线程时,可以参考这篇博客:https://blog.youkuaiyun.com/liang19890820/article/details/61615495

具体的创建要点如下:(创建私有类实例对象,然后用一个公共函数接口调用该私有实例对象)

a1.首先新建一个c++类,基类选择QObject,命名为QIdlerSingleton。

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三公子Tjq

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值