项目中单例类很多的话,每个都要声明代码回比较累赘,所以写了一个宏定义简介使用:
宏定义如下:
#define DECLARE_SINGTON(ClassName)\
private:\
ClassName(){};\
~ClassName(){};\
ClassName(const ClassName&);\
ClassName& operator=(const ClassName&);\
static ClassName* m_pInstance;\
class CGarbo{\
public:\
~CGarbo(){\
if(m_pInstance == NULL){\
delete m_pInstance;\
m_pInstance = NULL;\
}\
}\
};\
static CGarbo CGarbo;\
public:\
static ClassName* getInstance(){\
if(m_pInstance == NULL){\
lock();\
if(m_pInstance == NULL){\
m_pInstance = new ClassName();\
}\
unlock();\
}\
return m_pInstance;\
}
使用代码:
class CSingletonTest{
DECLARE_SINGTON(CSingletonTest)
public:
void helloWorld(){
printf("hello world");
}
};
CSingletonTest* CSingletonTest::m_pInstance = NULL;
注意:
1、如果需要在多线程环境下运行的话,需要实现lock和unlock函数
2、使用的时候需要在单例类外部声明一下静态变量