有没有什么方法可以让单例类在程序栈上初始化(因此成员变量也是如此)?我试过了,都失败了:
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;)而失败,其次由于延迟初始化而失败。有人能帮帮我吗?
谢谢
发布于 2011-11-27 17:24:18
单例的全部要点不是依赖于它何时何地被初始化。第一次访问将初始化对象,所有后续访问都将产生相同的对象。
如果你把对象放在堆栈上-当堆栈关闭时(你退出作用域),它将被销毁,因此未来的访问将产生无效的或不同的对象,但不是相同的(因为你超出了同一对象的作用域)。
因此,根据单例的定义,这是不能完成的。
现在,如果你解释你试图解决的问题,有人可能会以更明智的方式帮助你解决它。
https://stackoverflow.com/questions/8284561
复制相似问题