디자인 모드 singleton 템 플 릿 클래스 구현
코드 를 보 니 인터넷 에 유사 한 코드 가 많 습 니 다. 저 는 mutex 에서 qt 를 사 용 했 습 니 다.
#ifndef SINGLETON_H
#define SINGLETON_H
#define __instance(cls) Singleton
::getInstance() #include "Header.h"
template <class T>
class Singleton
{
public:
static T* getInstance();
protected:
Singleton(){};
private:
Singleton(const Singleton&){};//
virtual ~Singleton() {};
Singleton& operator=(const Singleton&){};//
static T* m_instance;
static QMutex m_lock;
};
//
template <class T> T* Singleton<T>::getInstance()
{
if (nullptr == m_instance)
{
m_lock.lock();
if (nullptr == m_instance)
{
m_instance = new T();
}
m_lock.unlock();
}
return m_instance;
}
template <class T> T* Singleton<T>::m_instance = nullptr;
template <class T> QMutex Singleton<T>::m_lock;
#endif // SINGLETON_H
어떻게 사용 할 까요? 다음은 제 가 직접 쓴 Err 스 레 드 안전 관리자 입 니 다. 아래 를 보 세 요. friend 류 는 Public proctected 와 상 관 없 이 어디 에 두 어도 됩 니 다.
아주 간단 하지 않 습 니까? 사용 할 때 직접instance(ErrMgr)->getLastErr();#ifndef ErrMgr_H
#define ErrMgr_H
#include "Header.h"
class ErrMgr : public QObject
{
Q_OBJECT
friend class Singleton<ErrMgr>;
public:
void resetErr();//
void addErr(QString str);//
QString getLastErr();//
private:
explicit ErrMgr(QObject *parent = 0);
private:
QQueue<QString> m_arErrs;//
QMutex m_mutexErrs;//
};
#endif // ErrMgr_H
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.