0

除了这个之外,还有其他类单例方法吗?

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

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

4

1 回答 1

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;
于 2012-10-28T02:56:37.627 回答