Java 에서는 쉽게 구현되는 싱글톤 패턴이지만.. C++ 에서는 조금 신경을 써야겠다;;
일단 Header
class CSingleton
{
private :
// 유일한 인스턴스를 유지하기 위해 클래스 포인터 선언.. 인스턴스에 종속되면 안되므로 static 으로 해주는 센스~
// 외부의 접근을 막기 위해 private 으로 선언해준다.
static CSingleton * pSingleton;
protected :
// 생성자는 클래스를 이용하는 외부 모듈에서 생성하는걸 방지하기 위해 protected 로 선언한다 (Private 로 해도 무관..)
CWordLibrary (void);
public :
// getInstance 라는 Static 함수로 외부모듈에서 이 클래스를 사용할수 있는 인터페이스를 제공해준다.
static CWordLibrary * getInstance ();
// getInstance 부분에서 new 로 클래스를 생성하기 때문에 delete 를 해준 코드를 넣어주기 위해 freeInstance 를 만들어준다.
// 이 작업을 하지 않는다면.. 메모리 누수가 날 확률이 많이 때문에 신경써줘야한다. C++ 은 자바가 아니기 때문 ㅋ
static void freeInstance ();
// 나머지 클래스 구성들 .....
}
해더는 이런식으로 구성해주면 ㅇㅋ
이제는 Body 부분을 구현해보자
생성자는 별 코드가 없기 때문에 Pass
중요한 클래스 포인터 초기화 코드
// 많은 사람들이 잘 까먹는 문법이다.. 꼭 해주길.. Release 모드로 컴파일하면 문제야 없겠지만 .Debug 모드에서 문제가 발생한 확률 99.9999% ㅋ
CSingleton * CSingleton::pWordLibrary = NULL;
CSingleton * CSingleton::getInstance ()
{
if (pSingleton == NULL)
pSingleton = new CSingleton ();
return pSingleton;
}
void CSingleton::freeInstance ()
{
if (pSingleton != NULL)
delete pSingleton;
pSingleton = NULL;
}