gpt4 book ai didi

c++ - 这个单例实现有问题吗?

转载 作者:可可西里 更新时间:2023-11-01 16:38:24 25 4
gpt4 key购买 nike

我通常习惯于以这种方式实现单例模式,因为它非常简单:

class MyClass
{
public:
MyClass* GetInstance()
{
static MyClass instance;
return &instance;
}

private:
//Disallow copy construction, copy assignment, and external
//default construction.
};

这似乎比创建静态实例指针、在源文件中对其进行初始化,以及在带有守卫的实例函数中使用动态内存分配要容易得多。

是否有我没有看到的缺点?它对我来说看起来是线程安全的,因为我认为第一个到达第一行的线程会导致实例化——而且它看起来很简洁。我认为一定有一个我没有看到的问题,因为这并不常见 - 我想在继续使用它之前获得一些反馈

最佳答案

这不是固有的线程安全解决方案:在构造实例时,另一个线程可以抢占并尝试获取实例,从而导致双实例或使用未构造的实例。

这由几个编译器通过添加一个保护来处理(在 gcc 中,我认为有一个标志可以禁用它)因为没有办法用用户定义的互斥锁来保护它。

关于c++ - 这个单例实现有问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9229016/

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