Leaky Meyers Singleton:它是线程安全的吗?

Leaky Meyers Singleton: is it threadsafe?

我实现了一个 Meyers Singleton,然后意识到它可能容易受到析构函数失败问题的影响。

因此,我将代码更改为:

Instance *getInstance()
{
    static Instance* singleton = new Instance();
    return singleton;
}

在实现这个之后,没有出现明显的错误,一位同事正在实现一个不同的单例并使用 std::call_once 代替。

我现在意识到,经过大量搜索后,我找不到“Leaky Meyers Singleton”是否是线程安全模式。 leaky singleton是否应该改为std::call_once?或者它是线程安全的吗?

指针是否被视为“块作用域”变量?如果是这样,我认为这将是线程安全的,但如果不是,则当前泄漏的单例方法会引入重大错误。

是的,这是线程安全的:没有两个线程会同时尝试用静态存储持续时间初始化同一个变量。这包括评估初始值设定项的全部内容。