我擅长 C++,但试图了解单例的工作原理。所以我正在查看代码或文章HERE。
如果我会看到代码;
class Singleton
{
private:
static bool instanceFlag;
static Singleton *single;
Singleton()
{/*private constructor*/}
public:
static Singleton* getInstance();
void method();
~Singleton()
{instanceFlag = false;}
};
bool Singleton::instanceFlag = false;
Singleton* Singleton::single = NULL;
Singleton* Singleton::getInstance()
{
if(! instanceFlag)
{
single = new Singleton();
instanceFlag = true;
return single;
}
else
{return single;}
}
void Singleton::method()
{cout << "Method of the singleton class" << endl;}
int main()
{
Singleton *sc1,*sc2;
sc1 = Singleton::getInstance();
sc1->method();
sc2 = Singleton::getInstance();
sc2->method();
return 0;
}
在上面打印的代码中Method of the singleton class
twice
。如果我们想打印output
两次,那我们为什么需要单例。我们可以这样写;
sc1->method();
sc2->method();
为什么需要上面写的这么复杂的代码。我注意到的一件事是,instanceFlag
一旦条件满足 onject 条件就会变为真,sc1
但是当对象sc2
被调用时,它就会分解else
。
So, what exactly we are trying to do here?