前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >c 线程安全的单例模式-std string与线程安全_这才是现代C++单例模式简单又安全的实现

c 线程安全的单例模式-std string与线程安全_这才是现代C++单例模式简单又安全的实现

作者头像
囍楽云
发布2022-12-29 14:31:38
5990
发布2022-12-29 14:31:38
举报
文章被收录于专栏:囍楽云博客囍楽云博客

  前言

  说到单例模式,很多人可能都已经很熟悉了,这也是面试常问的一个问题。对于单线程而言c 线程安全的单例模式,单例的实现非常简单,而要写出一个线程安全的单例模式,曾经有很多种写法。有兴趣的可以参考这篇文章《单例模式很简单?但是你真的能写对吗?》

  简单实现

  该文章中也提到c 线程安全的单例模式,由于C++11及以后的版本中,默认静态变量初始化是线程安全的。

  The of such a is to occur the first

  time passes its ; for

   the , this means there’s the for a race

   to define first.

  写法如下:

   //来源:公众号编程珠玑

代码语言:javascript
复制
    //作者:守望先生
    class Singleton{
    public:
    
        static Singleton& getInstance(){
            static Singleton m_instance;  //局部静态变量
            return m_instance;
        }
        Singleton(const Singleton& other) = delete;
        Singleton& operator=(const Singleton& other) = delete;
    protected:
        Singleton() = default;
        ~Singleton() = default;
    };

  这里需要注意将其他构造函数设置为delete。避免对象被再次构造或者拷贝。

  这种单例被称为Meyers’ 。

  通用化

  当然为了避免给每个对象都单独写个单例,也可以利用模板。

   template

代码语言:javascript
复制
    class Singleton
    {
    public:
        static T& getInstance() {
            static T t;
            return t;
        }
        Singleton(const Singleton&) = delete; 
    
        Singleton& operator=(const Singleton&) = delete; 
    protected:
        Singleton() = default;
        ~Singleton() = default;
    };

  示例

  举个简单的例子来看下吧:

代码语言:javascript
复制
//来源:公众号编程珠玑
//作者:守望先生
#include
template

class Singleton
{
public:
    static T& getInstance() {
        static T t;
        return t;
    }
    Singleton(const Singleton&) = delete; 
    Singleton& operator=(const Singleton&) = delete; 
protected:
    Singleton() = default;
    ~Singleton() = default;

};
class Test:public Singleton
{public:void myprint(){std::cout"test Singleton"
[1]: https://xuan.ddwoo.top/index.php/archives/585/
[2]: https://xuan.ddwoo.top/index.php/archives/596/                
        本文共 269 个字数,平均阅读时长 ≈ 1分钟
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档