是否还有其他类单例方法?
class Foo
{
private:
Foo(){};
~Foo(){};
public:
static Foo& GetInstance( void )
{
static Foo obj;
return obj;
}
};
这个很好,适用于所有情况,除了只在第一次访问GetInstance()
时调用类构造函数,这会导致WinMain
出现一些问题,
例如,当构造函数上有文件读取并且从中设置类成员值时,如.ini / .lua配置
答案 0 :(得分:0)
就个人而言,我不喜欢这种方式来实例化Singleton类。我喜欢使用init
函数来显式创建类,并使用Done
函数来释放。模板化也使一切变得更整洁。至于加载文件,这应该是子类的方法。
// Singleton.h
template<class T>
class Singleton
{
public:
static void Init() { m_pInst = new T(); }
static void Done() { delete m_pInst; }
static T& GetInstance() { assert(m_pInst); return *m_pInst; }
protected:
Singleton() {}
private:
Singleton(const Singleton&) {}
private:
static T* m_pInst;
}
// Foo.h
class Foo : public Singleton<Foo>
{
public:
void LoadConfig(const char* path) {} // Load config.
}
// Foo.cpp
Foo* Singleton<Foo>::m_pInst = NULL;