饿汉模式单例模板

老子叫甜甜 提交于 2020-03-30 19:37:22

使用c11的std::call_once实现饿汉模式的单例模板

 

#ifndef SINGLETON_H
#define SINGLETON_H
#include <memory>
#include <mutex>

//单例模板

template <typename T>
class Singleton {
public:
    static T& GetInstance();

private:
    static std::unique_ptr<T> instance;
};

template <typename T>
std::unique_ptr<T> Singleton<T>::instance;

template <typename T>
T& Singleton<T>::GetInstance()
{
    std::once_flag sflag;
    std::call_once(sflag, [&](){
        instance.reset(new T());
    });
    return *instance;
}



#define SINGLETON(Class)                           \
public:                                            \
    ~Class() = default;                            \
private:                                           \
    Class() = default;                             \
    Class(const Class &other) = delete;            \
    Class& operator=(const Class &other) = delete; \
    friend class Singleton<Class>;                 \

#endif // SINGLETON_H

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!