美文网首页
C++模板实现单例模式

C++模板实现单例模式

作者: sunix | 来源:发表于2018-12-14 15:43 被阅读0次

    早在第一篇博文中,最后提出一个问题,使用模板来实现单例模式.现给出方法.

    singleton.h

    #pragma once
    #include <memory>
    #include <mutex>
    
    template<typename T>
    class Singleton {
    public:
        static std::shared_ptr<T> instance() {
            std::call_once(_onceFlag,[](){
                _instance = std::shared_ptr<T>(new T());
            });
            return _instance;
        };
    
    protected:
        Singleton() {};
        ~Singleton() {};
    
    private:
        Singleton(const Singleton& other);
        Singleton &operator=(const Singleton& other);
    
        static std::once_flag _onceFlag;
        static std::shared_ptr<T> _instance;
    };
    
    template<typename T>
    static std::once_flag Singleton<T>::_onceFlag;
    
    template<typename T>
    static std::shared_ptr<T> Singleton<T>::_instance;
    

    sample.h

    #pragma once
    #include "singleton.h"
    
    class Sample : public Singleton<Sample> {
        friend class Singleton<Sample>;
    
    public:
        ~Sample();
    private:
        Sample();
    };

    相关文章

      网友评论

          本文标题:C++模板实现单例模式

          本文链接:https://www.haomeiwen.com/subject/yryghqtx.html