扩展具有私有构造函数和析构函数的单例类会给出编译时警告

Eng*_*ain 2 c++ inheritance singleton design-patterns extend

我正在使用 C++ (Qt)。

我正在扩展一个单例类,而一个子类只有静态方法。我没有创建子类的任何实例。Singleton 类的构造函数和析构函数都是私有的,所以我无法访问它的构造函数和析构函数。

 class Singleton 
 { 
   private :
           Singleton();
           ~Singleton();
   public :
      // some methods.
 }

 class SubClass : public Singleton
 {
   // There is NO constructor or destructor
   public:
   // Only some STATIC methods.
 }
Run Code Online (Sandbox Code Playgroud)

我使用调用父类的 getInstance()SubClass::getInstance()。我只使用 SubClass 的静态方法(所以不需要实例化 SubClass)。

所以我的问题是,我在编译时收到警告 -

“无法生成子类:析构函数,因为无法访问基类析构函数”。

我想摆脱这些警告,还想知道这个设计是否违反了单例设计模式?


我想实现什么?

我正在为应用程序创建一个记录器。我正在使用第三方库的记录器类(QxtCore 库的 QxtLogger)。这个 QxtLogger 类是一个单例,具有私有的构造函数和析构函数。我想要一个包含 QxtLogger 拥有的所有方法和一些额外的静态方法(特定于我的应用程序)的单例类。

因此,我创建了一个继承 QxtLogger 的类并为其添加了一些静态方法。我担心的是扩展生成警告的单例类(因为基类构造函数和析构函数不可访问)。所以我该怎么做?

Luc*_*ore 6

您不能扩展没有可见构造函数的类。这就是班级设计者的意图。

如果他们想要扩展类,他们会创建 constructor/destructor protected

我建议你使用组合而不是继承。