template <typename>
class Singleton
{
public:
static T * Instance()
{
if (m_kInstance == NULL) m_kInstance = new T;
return m_kInstance;
};
static DestroyInstance()
{
delete m_kInstance;
m_kInstance = NULL;
};
private:
static T * m_kInstance;
};
template <typename> T* Singleton<T>::m_kInstance = 0;
출처:
http://gpgstudy.com/forum/viewtopic.php?t=5405
에서 카피한 코드입니다.
여기서 DestroyInstnace()라고 따로 함수를 만들었는데
이러지 않고 그냥 소멸자로
virtual ~Singleton () {
delete m_kInstance;
m_kInstance = NULL;
}
이것을 대신해서 쓰면 자동으로 호출하므로 더 편하지 않나요..? 가 아니라, 제 생각에서 틀린점을 좀 찾아주십시오. 뭔가 이유가 있어서 저렇게 안쓰시는거 같은데..
겟판을 잘못찾아왔으면 죄송합니다.. (--)(__)
code project 의 싱글톤
-
- Posts: 587
- Joined: 2004-05-09 20:37
Re: code project 의 싱글톤
masknecr wrote:template <typename>
class Singleton
{
public:
static T * Instance()
{
if (m_kInstance == NULL) m_kInstance = new T;
return m_kInstance;
};
static DestroyInstance()
{
delete m_kInstance;
m_kInstance = NULL;
};
private:
static T * m_kInstance;
};
template <typename> T* Singleton<T>::m_kInstance = 0;
출처:
http://gpgstudy.com/forum/viewtopic.php?t=5405
에서 카피한 코드입니다.
여기서 DestroyInstnace()라고 따로 함수를 만들었는데
이러지 않고 그냥 소멸자로
virtual ~Singleton () {
delete m_kInstance;
m_kInstance = NULL;
}
이것을 대신해서 쓰면 자동으로 호출하므로 더 편하지 않나요..? 가 아니라, 제 생각에서 틀린점을 좀 찾아주십시오. 뭔가 이유가 있어서 저렇게 안쓰시는거 같은데..
겟판을 잘못찾아왔으면 죄송합니다.. (--)(__)
기분탓인가요? new로 생성되었으니, 소멸자가 호출되려면 delete가 되어야 합니다
하지만 새로 추가 하신 코드에선 소멸자에서 delete를 호출하는 코드가 있으므로 ,
서로 무한 재귀적 호출이 될거 같습니다
-
- Posts: 886
- Joined: 2005-07-12 01:19
- Location: (주) 신규 소프트
Re: code project 의 싱글톤
--mastercho wrote: 기분탓인가요? new로 생성되었으니, 소멸자가 호출되려면 delete가 되어야 합니다
하지만 새로 추가 하신 코드에선 소멸자에서 delete를 호출하는 코드가 있으므로 ,
서로 무한 재귀적 호출이 될거 같습니다
말씀듣고 보니, 제가 질문글을 꼼꼼이 안 읽은것 같네요....첫 답글의 생각은
상속을 쓰지 않은 타입래퍼 유형의 싱글턴이라 여기고 쓴 것인데....
질문자님의 링크를 타보니, 상속기반 싱글턴 유틸리티네요..
--
동적 할당된 객체의 소멸자가 호출되기 위해서는 어차피 바깥에서 delete가 필요한 것인데,
소멸자 내부에서 자기 자신에 해당되는 객체를 delete하는 것은 앞뒤가 안맞겠죠...
집사람이 국력이다...