callstack上的Singleton类

时间:2011-11-27 09:11:17

标签: c++ singleton callstack

是否有一些方法可以使单例类在程序堆栈上初始化(因此也是成员变量)? 我试过以下,都失败了:

1)

class CStack{
public:
  void* getAlloc(long);
  static CStack& Instance(){
    static CStack theStack;
    return theStack;
  }

private:
  bool _data[100];

  CStack(){};
  CStack(const CStack&);
  CStack& operator=(const CStack&);
};

2)

class CStack{
public:
  void* getAlloc(long);
  static CStack* Instance();

private:
   CStack(){};
   CStack(CStack const&){};
   CStack& operator=(CStack const&){};
   static CStack* m_pInstance;
};

CStack* CStack::m_pInstance = NULL;

CStack* CStack::Instance(){
  if (!m_pInstance)   // Only allow one instance of class to be generated.
      m_pInstance = new CStack;

   return m_pInstance;
}

由于非放置新初始化(m_pInstance = new CStack;)而导致第一次失败,其次是由于延迟初始化。有人可以帮助我吗?

由于

1 个答案:

答案 0 :(得分:3)

单身人士的全部意义不是依赖于初始化的时间和地点。第一次访问将初始化对象,所有后续访问将产生相同的对象。

如果你把对象放在堆栈上 - 它会在堆栈关闭时被破坏(你退出范围),因此将来的访问会产生无效或不同的对象,但不一样(就像你'超出同一范围的范围。)

因此,根据单身人士的定义,不能这样做。

现在,如果你解释你试图解决的问题,有人可能会帮助你以更合理的方式解决它。