在调用堆栈Singleton类(Singleton class on callstack)

2019-09-28 02:08发布

有没有一些方法,使单例类初始化上的程序堆栈(因此成员变量也)? 我曾尝试以下,两者都失败了:

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 =新CSTACK),第二由于延迟初始化。 可以,请帮助我的人?

谢谢

Answer 1:

单身的整点是不依赖于何时何地被初始化。 第一个访问将初始化对象,以及所有后续访问会产生相同的对象。

如果你把对象在栈上 - 这将是当堆栈被关闭(你将退出范围),当你出门在外的破坏,因此,未来的访问会产生无效的或不同的对象,但不一样的(对于相同的一个范围)。

因此,通过单的定义,它无法做到的。

现在,如果你解释你正在试图解决这个问题,有人可以帮你在一些更合理的方式解决它。



文章来源: Singleton class on callstack