实现基于以下:
在进入main函数之前是单线程的;
使用全局变量的方式设计singleton;
保障在使用改singleton之前其已经被正确初始化。
namespace common {
template <typename T>
class Singleton {
public:
struct object_creator {
object_creator() { Singleton<T>::instance(); }
inline void do_nothing() const {}
};
static object_creator create_object;
typedef T object_type;
static object_type& instance() {
static object_type obj;
create_object.do_nothing();
return obj;
}
};
template <typename T>
typename Singleton<T>::object_creator Singleton<T>::create_object;
} // namespace common