是否有一些方法可以使单例类在程序堆栈上初始化(因此也是成员变量)? 我试过以下,都失败了:
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;)而导致第一次失败,其次是由于延迟初始化。有人可以帮助我吗?
由于
答案 0 :(得分:3)
单身人士的全部意义不是依赖于初始化的时间和地点。第一次访问将初始化对象,所有后续访问将产生相同的对象。
如果你把对象放在堆栈上 - 它会在堆栈关闭时被破坏(你退出范围),因此将来的访问会产生无效或不同的对象,但不一样(就像你'超出同一范围的范围。)
因此,根据单身人士的定义,不能这样做。
现在,如果你解释你试图解决的问题,有人可能会帮助你以更合理的方式解决它。