还有其他类单例方法吗?

时间:2012-10-28 02:49:28

标签: c++ class singleton

是否还有其他类单例方法?

class Foo
{
private:
Foo(){};
~Foo(){};
public:
 static Foo& GetInstance( void )
    {
      static Foo obj;
      return obj;
    }
};

这个很好,适用于所有情况,除了只在第一次访问GetInstance()时调用类构造函数,这会导致WinMain出现一些问题, 例如,当构造函数上有文件读取并且从中设置类成员值时,如.ini / .lua配置

1 个答案:

答案 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;