#define DECLARE_VIRTUAL_SINGLETON(CLASS)\
public:\
static CLASS* Instance ();\
static void Destroy ();\
protected:\
virtual ~CLASS() {}; \
\
private:\
volatile static CLASS* m_pInstance;
#define IMPLEMENT_VIRTUAL_SINGLETON(CLASS, IMPLCLASS)\
volatile CLASS* CLASS::m_pInstance = NULL;\
\
CLASS* CLASS::Instance ()\
{\
if (NULL == m_pInstance)\
{\
/*ACE_MT (ACE_GUARD_RETURN (ACE_Recursive_Thread_Mutex, ace_mon, *ACE_Static_Object_Lock::instance(), 0));*/\
if (NULL == m_pInstance)\
{\
m_pInstance = new IMPLCLASS;\
/*ACE_OS::*/atexit(CLASS::Destroy);\
}\
}\
\
return (CLASS*)m_pInstance;\
}\
\
void CLASS::Destroy ()\
{\
if (m_pInstance != NULL)\
{\
delete m_pInstance;\
m_pInstance = NULL;\
}\
}
#define DECLARE_SINGLETON(CLASS)\
public:\
static CLASS* Instance ();\
static void Destroy ();\
\
private:\
volatile static CLASS* m_pInstance;\
CLASS();\
CLASS(const CLASS&);\
CLASS& operator= (const CLASS&);\
~CLASS();
#define IMPLEMENT_SINGLETON(CLASS) \
IMPLEMENT_VIRTUAL_SINGLETON(CLASS, CLASS)\
\
CLASS::CLASS(const CLASS&){}\
\
CLASS& CLASS::operator= (const CLASS&) {return *this;}
/*!\}*/
#endif //_SINGLETON_H_