static T& GetInstance() \
{\
static T instance(__VA_ARGS__); \
return instance; \
}
#define SINGLETON_NOARG(T) \
static T& GetInstance() \
{\
static T instance; \
return instance; \
}
这两个宏需要在public域下使用
目前还没有实现将两个宏合并为一个宏,如果有朋友知道 烦请告知~
另外如果需要自动实现无法赋值拷贝,可以使用boost::noncopyable
具体如下
#include <boost/noncopyable.hpp>
class Singleton : boost::noncopyable
{
protected:
Singleton()
{
}
};
你的类只需要继承这个Singleton类即刻,当然,还得用上之前的两个宏中的一个来定义函数~
update:
可以用
#define SINGLETON(T, ...) \
static T& GetInstance() \
{\
static T* p = new T(__VA_ARGS__); \
return *p; \
}\
来替换之前的两个宏,这样只需要一个宏即可
update 2:
据说良好的设计是在main函数之前都是单线程的, 那么 需要线程安全的话,就在使用下面两个
#define SINGLETON_DECLEAR(T) \
static T* pInstance; \
static T& GetInstance() \
{\
return *pInstance; \
}
#define SINGLETON_IMPLEMENT(T, ...) \
T* T::pInstance = new T(__VA_ARGS__);
这样当还没进入主函数的时候都已经初始化好了,而且实现CPP和H分离。
哈 很无聊的感觉~