美文网首页
如何优雅实现单例类

如何优雅实现单例类

作者: crazyhank | 来源:发表于2022-03-05 21:55 被阅读0次

    在项目中使用单例类是个比较通用的需求,比如我们定义了一个类A,我们想实现一个类A的单例模式。

    方法1:直接在类A的定义中实现
    class A {
    public:
      static A& Get()
      {
        static A instance;
        return instnace;
      }
    private:  // 将A的构造函数声明为private,这样就避免在外部产生A对象实例的可能性。
      A() {}
      ~A() {}
    };
    
    // 调用A单例对象成员函数
    A::Get().xxx; // 单例实例对象
    
    方法2:通过一个模板类
    template<typename T>
    class Singleton {
    public:
      static T& Get()
      {
        static T instance;
        return instance;
      }
    };
    
    // 调用A单例对象成员函数
    Singleton<A>::Get().xxxx;
    
    

    总结:方法2的好处是可以用类模板进行泛化,如果你的项目场景中会涉及多个类的单例需求,可以使用该方法,但是这里有个问题是它没办法阻止用户自己创建T类型对象。

    相关文章

      网友评论

          本文标题:如何优雅实现单例类

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