gpt4 book ai didi

C++ Singleton类创建多个实例

转载 作者:行者123 更新时间:2023-11-28 02:47:55 28 4
gpt4 key购买 nike

静态方法 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++ Singleton类创建多个实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23778410/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com