从单例模板继承

Inheriting from a singleton template

本文关键字:继承 单例模      更新时间:2023-10-16

我在看一个开源库VLMC,发现了这个单例的实现。这样做的方式是,为了创建一个单例类"Library",Library继承自一个单例类。这样的

//SINGLETON_HPP

template <typename T>
class       Singleton
{
   //regular singleton implementation
    protected:
      Singleton(){}
      virtual ~Singleton(){}
};
template <typename T>
T*  Singleton<T>::m_instance = NULL;
//LIBRARY_H_

class Library : public Singleton<Library>
{
  //some other stuff 
private:
    Library();
    virtual ~Library(){}
friend class    Singleton<Library>;
}

这个设计好吗?这种设计有什么优点?谢谢你。

CV

如果你需要一个类的实例放在所有人都能看到的全局位置,那么创建一个实例并把它放在每个人都能看到的地方。让类知道它将存在多少个实例是糟糕的设计,并且限制了类的基本使用。

我不止一次看到一个在项目开始时看起来像单例的类在项目结束时几乎没有实例。