페이지

2015년 1월 4일 일요일

C++ Template Singleton Class

싱글톤은 전역 객체가 필요한 경우 유용하기 사용 될 수 있습니다.
특히 단 하나의 객체만의 필요한 Class의 경우 싱글톤은 사용하면, 여러 곳에서 각각 생성될 경우를 제거 할수 있습니다.

싱글톤을 구현하는 방법은 많습니다.

싱글톤으로 사용되어져야할 Class 안에 static 포인터 및 함수들을 선언하여 구현하는 방법.
싱글톤의 기능을 구현한 Class를 상속받아서 사용하는 방법

등등...

기존에 구현해 놓은 Class를 전혀 손대지 않고, Singleton 을 사용하는 가장 간편한 방법은
Template 을 이용하여 Singletone Class를 구현하여 사용 하면 됩니다.

Singletone Class의 코드는 아래와 같습니다.

[-] Collapse
#pragma once

template <typename T>
class CSingleton
{
private:
    static T *pInstance;

public:
    static T& Get()
    {
        if(pInstance == NULL) pInstance = new T;
        return *pInstance;
    }
    static T* GetPtr()
    {
        if(pInstance == NULL) pInstance = new T;
        return pInstance;
    }
    static void Release()
    {
        if(pInstance != NULL) delete pInstance;
    }
};

기존에 구현해 놓은 Class를 이 CSingleton Class 를 이용하여 사용하는 방법은 아래와 같습니다.  

첫째, 전역으로 사용할 Class의 포인터를 선언하고 CSingleton pInstance 를 NULL로 설정한다. (cpp 파일 윗쪽에 위치)
[-] Collapse
CTestClass* CSingleton<CTestClass>::pInstance = NULL;

둘째, 아래와 같이 GetPtr() 을 이용하여 사용한다.

[-] Collapse
CSingleton<CTestClass>::GetPtr()->Func();

참 쉽죠잉~




댓글 없음:

댓글 쓰기