QT单例模式(函数模板实现)

目录

一、前言

二、源码简析

三、Deomo/源码


一、前言

单例模式是用来保证系统中只有一个实例,并提供一个访问它的全局访问点。

本节提供一个C++函数模板实现的单例模式,可直接套用。

 

二、源码简析

①单例函数模板

TSingleMode.h

#ifndef __TSINGLEMODE_H__
#define __TSINGLEMODE_H__

#include <QMutex>

template<typename T>
class TSingleMode
{
protected:
    TSingleMode(){}
    virtual ~TSingleMode(){}

public:
    static T * getInstance()
    {
        if(m_instance == NULL)
        {
            m_mutex.lock();
            if (m_instance == NULL)
            {
                m_instance = new  T;
            }
            m_mutex.unlock();
        }

        return m_instance;
    }

    //摧毁单例
    static void deleteInstance()
    {
        if(m_instance != NULL)
        {
            delete m_instance;
            m_instance = NULL;
        }
    }

private:
    static T * m_instance;
    static QMutex m_mutex;    //加入互斥锁,保证线程安全(如果存在多线程)
};

//静态成员变量初始化
template<typename T>
T* TSingleMode<T>::m_instance = NULL;

template<typename T>
QMutex TSingleMode<T>::m_mutex;

#endif

②使用方法

有两种方法,一种是直接调用模板;

另一种是继承模板单例化,例如有一个CSingleMode的类:

CSingleMode.h

#ifndef CSINGLEMODE_H
#define CSINGLEMODE_H

#include "TSingleMode.h"

//第二种方法,继承
class CSingleMode : public TSingleMode<CSingleMode>
{
    friend class TSingleMode<CSingleMode>;
public:
    CSingleMode();
    ~CSingleMode();

    QString setStr();

private:
    int m_load;
};


// 第一种方法,直接调用,上面就不需要继承TSingleMode模板了
// #define g_SingleMode (*TSingleMode<CSingleMode>::getInstance())


#endif // CSINGLEMODE_H

CSingleMode.cpp

#include "CSingleMode.h"
#include <QString>

CSingleMode::CSingleMode()
{
}

CSingleMode::~CSingleMode()
{
}


QString CSingleMode::setStr()
{
    return QString("TextLabel_change");
}

那么这个CSingleMode.就是一个单例,可以直接使用,使用方法:

//第一种直接调用模板的方法
g_SingleMode.setStr();

//第二种继承的方法
CSingleMode::getInstance()->setStr();

 

三、Deomo/源码

链接:https://pan.baidu.com/s/1KcnHgzjCTbdWITD5jnt-LA 
提取码:bjoy 

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值