如何优雅实现单例类

2022-03-05  本文已影响0人  crazyhank

在项目中使用单例类是个比较通用的需求,比如我们定义了一个类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类型对象。

上一篇下一篇

猜你喜欢

热点阅读