在典型的单例中,第一次调用getInstance()时会调用构造函数。我需要的是分离init和getInstance函数。 init函数必须使用构造函数创建实例,并且只有在调用了init函数时才能使用getInstance(否则会抛出异常)。我怎么能这样做?
Singleton::init(required argument); //calls constructor
Singleton::getInstance(); //only possible if init had been called, otherwise throws exception
答案 0 :(得分:2)
在init方法中设置一个bool,表示init成功。在getInstance方法中,如果异常为false则抛出异常。
您可以将其作为静态私有成员存储在类中。
#include <iostream>
class Single
{
public:
static void init(int x)
{
single.number = x;
inited = true;
}
static Single & GetInstance()
{
//Do exception stuff here....
if(inited)
{
std::cout << "Inited" << std::endl;
}
else
{
std::cout << "NOT Inited" << std::endl;
}
return single;
}
void printTest()
{
std::cout << single.number << std::endl;
}
private:
Single() : number(5)
{
std::cout << "Construction " << std::endl;
}
int number;
static bool inited;
static Single single;
};
bool Single::inited = false;
Single Single::single;
int main()
{
std::cout << "Entering main" << std::endl;
Single::GetInstance();
Single::init(1);
Single::GetInstance().printTest();
}
节目输出:
Construction
Entering main
NOT Inited
Inited
1