【问题标题】:class B derived from an abstract base class A, and how can i use singleton in class B?B类派生自抽象基类A,我如何在B类中使用单例?
【发布时间】:2022-01-15 15:59:41
【问题描述】:

下面是演示代码:

class A {
public:
    A(){}    
    virtual void method()=0;
    //....
    virtual ~A(){};
}

class B : public A{
    static A * ptr;
    //....
public:
    //....
    static A* GetInstance() {
        if (ptr == nullptr)
            ptr = new B();  // error, currently B is an abstract class, it has not been constructed
        return ptr;
    }
    //.....
}

类 B 派生自抽象基类 A,我如何在 B 类中使用单例?

【问题讨论】:

  • 战术说明:查看Meyers Singleton 以获得更安全且通常更容易实现单例的方法。但是要多考虑一下你是否想要一个单身人士。它基本上是一个封装在类中的全局变量,而全局变量往往以简化代码的名义使代码复杂化。您必须管理这样一个事实,即任何人都可以随时更改全局而几乎没有可追溯性;调试时,一切都可能产生意想不到的副作用..

标签: c++ singleton abc


【解决方案1】:

你必须在 B 类中实现你的方法 1。 这不是单例的问题。问题是,您不能创建抽象类的实例。您的 B 类是抽象的,因为并非所有纯虚方法都在 B 类中实现。

或执行以下操作:

类AImplement:公共A

在 AImplement 内部,您实现自己的方法 1,这样 AImplement 就变得不抽象了。

现在,您可以在 B 类中创建 AImplement。

并且不要从 A 派生 B。

【讨论】:

    猜你喜欢
    • 2021-04-15
    • 2011-02-20
    • 1970-01-01
    • 2013-06-30
    • 2015-03-23
    • 2018-12-07
    • 2021-07-24
    • 1970-01-01
    • 2017-06-21
    相关资源
    最近更新 更多