我有一个虚拟单例,我想实现getInstance()
静态函数,但是每次调用时,静态对象都会重新初始化,所以每次都得到一个新实例,任何帮助将不胜感激 - 这让我非常困惑。静态局部变量被重新初始化
我想要实现的方法的类:
class Pc : public Machine
{
private:
... members ...
public:
static Pc* getInstance();
Pc() {};
virtual ~Pc() {}
... other functions ...
};
的父类:
从机class Machine
{
public:
static Machine* getInstance();
Machine() { }
Machine(const Machine&) = delete;
virtual ~Machine() { }
... methods ...
void operator=(const Machine&) = delete;
};
大桥 - > PC单
Machine* Machine::getInstance()
{
return Pc::getInstance();
}
我有两套的PC代码,我相信应该工作,我目前的解决方法代码...
非工作代码:
Pc* Pc::getInstance()
{
static Pc* pc = new Pc();
return pc;
}
工作(但bodged)getInstance()
代码:
static Pc* pc = nullptr;
Pc* Pc::getInstance()
{
if(pc == nullptr) {
pc = new Pc();
}
return pc;
}
虽然两者编译成功,突破后指向我的代码,我可以看到我的期望代码返回相同指针,但是在操作对象之后,第二次调用返回一个新对象,导致我相信静态变量已经被再次初始化。
编译与标志:
-ffreestanding -Wall -Wextra -fno-exceptions -fno-rtti -std=gnu++11 -lgcc
(这是一个OS项目)
我不知道这是否会对您的问题有任何影响,但单建设者应该声明'private' – bstar55
是不是第二种方式(工作方式)单一实例应该的方式被创建?不工作的方式每次调用时会创建一个新的“Pc”。 – gta0004
@ bstar55是的,他们应该尝试尽一切努力来实现这个目标,而这一切都是在摆弄代码时遗留下来的,遗憾的是代码不工作。 – Mattiemus