一般情况下对象的初始化会写在构造函数中,但是使用singleton的时候,最好不要这么写。
很有可能会出现,在数据初始化的时候单例被引用,而此时单例的构造还没有结束,因此会在此调用构造函数生成单例,一次往复,导致死循环。
例如
class B
{
void Ini()
{
A::GetInstance();
}
}
class A
{
static A* GetInstance()
{
if( !mIns )
{
mIns = new A();
}
};
A()
{
mB.Ini();
}
B mB;
static A* mIns;
}
比较好的做法是
class A
{
static A* GetInstance()
{
if( !mIns )
{
mIns = new A();
mIns.Ini();
}
return mIns;
};
A() {}
void Ini()
{
mB.Ini();
}
B mB;
static A* mIns;
}