Qt项目第三弹-单例全局类

自定义单例模板

#ifndef SINGLETON_H
#define SINGLETON_H

/***************************************************************
*  @Brief:      构建单例模板
*  @Author:     springIce
*  @Date:       2024-02-02
****************************************************************/

template <typename T>
class Singleton {
public:

    /**
    *  @Brief:      对外唯一接口,单例核心
    *  @Author:     springIce
    *  @Date:       2024-02-02
    **/
    static T* getInstance() {
        static T instance;
        return &instance;
    }

private:

    /**
    *  @Brief:      构造函数/拷贝构造函数/赋值函数均私有
    *  @Author:     springIce
    *  @Date:       2024-02-02
    **/
    Singleton();
    Singleton(const T &singleton){}
    Singleton &operator = (const T &singleton){}

};

#endif // SINGLETON_H

调用单例模板

这里以全局数据缓存为例,一个项目不可或缺的类

#ifndef DATACACHE_H
#define DATACACHE_H

#include <QObject>

#include "singleton.h"

/***************************************************************
*  @Brief:      调用单例模板
*  @Author:     springIce
*  @Date:       2024-02-02
****************************************************************/

class DataCache : public QObject
{
    Q_OBJECT
public:

    /**
    *  @Brief:      全局调用函数,复杂参数可使用struct
    *  @Author:     springIce
    *  @Date:       2024-02-02
    **/
    QString &getName();
    void setName(const QString &name);

public:
    friend class Singleton<DataCache>;

private:
    QString m_name;
};


/**
    *  @Brief:      将单例声明为宏方便外部调用
    *  @Author:     springIce
    *  @Date:       2024-02-02
    **/
#define DATACACHE Singleton<DataCache>::getInstance()

#endif // DATACACHE_H

#include "datacache.h"

QString &DataCache::getName()
{
    return m_name;
}

void DataCache::setName(const QString &name)
{
    m_name = name;
}

实际效果

调用实现代码如下

	Test::setName("Fantastic");
    qDebug() << DATACACHE->getName();
    DATACACHE->setName("springIce");
    qDebug() << DATACACHE->getName();
  • 在不同函数中对全局单例进行赋值并打印,完全没有问题

在这里插入图片描述


以上实现方式仅适用于非多线程调用,多线程调用使用上述方式无法做到真正的全局

  • 6
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值