将http://www.cnblogs.com/codingmylife/archive/2010/07/14/1777409.html中的单例模式,用宏的方式重写
#define Declare_Singlon(className)\
public:\
static className &getInstance(void){\
className::instance.testAndSetOrdered(0,0);\
if (instance.testAndSetOrdered(0, 0)){\
QMutexLocker locker(&mutex);\
instance.testAndSetOrdered(0, new className);\
}\
return *instance;\
}\
private:\
QReadWriteLock internalMutex;\
className();\
className(const className &);\
className & operator =(const className &);\
static QMutex mutex;\
static QAtomicPointer<className> instance;
#define Implement_Singlon(className)\
QMutex className::mutex;\
QAtomicPointer<className> className::instance = 0;
注:由于宏中不支持#ifndef,将其移除,
使用方法:
class xmlAppsetting
{
Declare_Singlon(xmlAppsetting)
private:
FyXMLOpe xmlOpe;
QString strFileName;
// DeviceInfo
QString strTpsList;
QString strTPSName;
QString strPortList;
QString strPort;
QString strGJYList;
QString strGJYName;
public:
void InitFromXML();
void SaveToXML();
};
在CPP文件中加入
Implement_Singlon(xmlAppsetting)