싱글턴 패턴(Singleton pattern)이란 어떤 클래스의 인스턴스를 단 하나만 허용하고,

이 인스턴스에 접근할 수 있는 전역적인 접근을 가능하게 하는 패턴이다.

 

즉, 응용프로그램내에서 단 하나뿐인 전역 클래스를 만들고 싶을 때,

싱글턴 패턴을 사용하게 된다.

 

나 같은 경우 주로 프로그램 실행 초기에,

전역적인 환경설정 값을 로드하는 시점에서

싱글턴 패턴을 많이 사용하는 편이다.

 

#include <iostream>
#include "Singleton.h"

using namespace std;

int main ( int argc, char **argv )
{   
    CSingleton *pInstance = CSingleton::GetInstance();

    pInstance->m_nAge = 100;
    pInstance->m_strName = "James";

    CSingleton *p = CSingleton::GetInstance();

    cout << "age " << p->m_nAge << endl;
    cout << "name " << p->m_strName << endl;

    return 0;
}

////////////////////////////////////////////////////////////////////////////////

#ifndef SINGLETON_H
#define SINGLETON_H

#include <string>

using namespace std;

class CSingleton  
{
private:
    CSingleton(){};
    virtual ~CSingleton(){};
    void Init();

public:
    static CSingleton *GetInstance();   

public:
    int m_nAge;
    string m_strName;

private:
    static CSingleton *m_pInstance;
};

#endif   // end of SINGLETON_H

////////////////////////////////////////////////////////////////////////////////

#include "Singleton.h"

CSingleton *CSingleton::m_pInstance = 0;

CSingleton* CSingleton::GetInstance()
{
    if ( !m_pInstance )
    {
        m_pInstance = new CSingleton;
        m_pInstance->Init();
    }

    return m_pInstance;
}

void CSingleton::Init()
{
    m_nAge = 0;
    m_strName = "";
}

 

[생각할 꺼리들]

 

1. 멀티쓰레드 환경에서 Instance가 생성되어 있지 않은 시점에서 동시에 GetInstance()를 호출했을 때의 문제점

2. 인스턴스에 할당된 메모리가 릴리즈 되는 시점

블로그 이미지

맨오브파워

한계를 뛰어 넘어서..........

,