C++ std::call_once 实现单例模式

#if 1
#include <iostream>
#include <memory>
#include <mutex>

using namespace std;

class Singleton
{
public:
    static Singleton &getInstance()
    {
        std::call_once(m_OnceFlag, &Singleton::init);
        return *m_Instance;
    }
    void setData(int data)
    {
        m_Date = data;
    }
    int getData()
    {
        return m_Date;
    }

private:
    Singleton(){}
    Singleton(const Singleton &) = delete;
    Singleton &operator=(const Singleton &) = delete;
    static void init()
    {
        m_Instance.reset(new Singleton);
    }
    static std::unique_ptr<Singleton> m_Instance;
    static std::once_flag m_OnceFlag;
    int m_Date{ 0 };
};

std::unique_ptr<Singleton> Singleton::m_Instance;
std::once_flag Singleton::m_OnceFlag;

int main()
{
    Singleton::getInstance().setData(100);
    cout << Singleton::getInstance().getData() << endl;
    system("pause");
    return EXIT_SUCCESS;
}

输出:

100





参考:http://www.seestudy.cn/?list_9/39.html

posted @   double64  阅读(70)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
历史上的今天:
2021-09-22 C# 去掉字符串多余空格
2021-09-22 C# 统计字符出现次数
2021-09-22 C# 冒泡排序
2021-09-22 C# Math.Round()四舍五入
2021-09-22 C# 交换两个变量值
2021-09-22 英语|play
2021-09-22 C#.Net XML
点击右上角即可分享
微信分享提示