Qt 글로벌 단일 예제 클래스

1785 단어
단례 모드: 구조 함수를 사유화하여 클래스 밖의 생성 대상을 금지할 수 있다.복사 구조 함수와 값 부여 조작부호를 delete로 다시 불러와서 생성된 대상이 복제되지 않도록 합니다.정적 함수와 정적 호환 자물쇠를 동시에 설명합니다.정적 함수는 대상을 생성하는 데 사용되며, 정적 함수는 대상을 통해 호출할 필요가 없습니다.상호 배척 자물쇠도 정적이라고 성명한 것은 정적 함수에서 클래스 구성원 변수에 접근할 수 없기 때문이다. 정적 함수는 대상을 통해 호출할 필요가 없기 때문에 클래스 구성원 변수에 접근할 수 있다면 자신도 방문한 것이 무엇인지 모른다.
#ifndef APPEVENT_H
#define APPEVENT_H

#include 
#include 
#include 

class AppEvent : public QObject
{
    Q_OBJECT
public:
 static QSharedPointer getInstance();

private:
explicit AppEvent(QObject *parent = 0);

    AppEvent& operator =(AppEvent&) = delete;
    AppEvent(AppEvent&) = delete;
private:
    static QSharedPointer m_appEvent_ptr;
    static QMutex m_mutex;
signals:

public slots:
};

#endif //APPEVENT_H

정적 함수 잠금 전후를 각각 한 번씩 판단하면 효율을 높일 수 있다.상호 배척 자물쇠와 대상이 생성되었는지 판단하는 것은 하나의 대상만 존재할 수 있음을 보장합니다.
#include "appevent.h"

AppEvent::AppEvent(QObject *parent)
:QObject(parent)
{}

QSharedPointer AppEvent::m_appEvent_ptr;
QMutex AppEvent::m_mutex;

QSharedPointer AppEvent::getInstance()
{
	if (nullptr == m_appEvent_ptr){
		m_mutex.lock();
		if (nullptr == m_appEvent_ptr){
			m_appEvent_ptr = QSharedPointer(new AppEvent);
		}
		m_mutex.unlock();
	}

	return m_appEvent_ptr;
}

다른 파일에서 이 전역 단일 예시 대상을 인용할 때, 단일 예시 대상 파일의 헤더 파일을 추가하고, 성명할 때 extern을 가져옵니다.전역 단일 예제 대상은 한 번만 초기화할 수 있음을 주의하십시오.
#include 
QSharedPointer g_appEvent_ptr = AppEvent::getInstace();

int main(int argc, char*argv[])
{
	QApplication a(argc, argv);
	a.exec();
}

좋은 웹페이지 즐겨찾기