首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >callstack上的单例类

callstack上的单例类
EN

Stack Overflow用户
提问于 2011-11-27 17:11:17
回答 1查看 137关注 0票数 1

有没有什么方法可以让单例类在程序栈上初始化(因此成员变量也是如此)?我试过了,都失败了:

1)

代码语言:javascript
复制
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)

代码语言:javascript
复制
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;)而失败,其次由于延迟初始化而失败。有人能帮帮我吗?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-11-27 17:24:18

单例的全部要点不是依赖于它何时何地被初始化。第一次访问将初始化对象,所有后续访问都将产生相同的对象。

如果你把对象放在堆栈上-当堆栈关闭时(你退出作用域),它将被销毁,因此未来的访问将产生无效的或不同的对象,但不是相同的(因为你超出了同一对象的作用域)。

因此,根据单例的定义,这是不能完成的。

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8284561

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档