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;
};


#endif // CSINGLEMODE_H

CSingleMode.cpp

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

CSingleMode::CSingleMode()
{
}

CSingleMode::~CSingleMode()
{
}


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

那麼這個CSingleMode.就是一個單例,可以直接使用,使用方法:

CSingleMode::getInstance()->setStr();

 

三、Deomo/源碼

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章