静态方法GetUI是使用鼠标事件来调用的,但是从调试中注意到,在某些非常罕见的情况下,随着鼠标事件的激增,构造函数被调用了两次。
问题是调度程序在构建过程中暂停,切换到另一个任务流程调用,该调用也开始创建另一个实例吗?
Object* Interface::instance = 0;
Object* Interface::GetUI() {
if (instance == 0) {
instance = new Interface();
}
return instance;
}
最佳答案
实际上,您应该锁定单例,否则,在进行多线程处理时,您将创建多个实例。
对于C ++ 11,可以按以下方式使用它。
#include <mutex>
class Singleton
{
static Singleton *singletonInstance;
Singleton() {}
static std::mutex m_;
public:
static Singleton* getSingletonInstance()
{
std::lock_guard<std::mutex> lock(m_);
if(singletonInstance == nullptr)
{
singletonInstance = new Singleton();
}
return singletonInstance;
}
}
关于c++ - C++ Singleton类创建多个实例,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23778410/