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

问题描述 投票:0回答:1

下面是演示代码:

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类中使用单例?

c++ singleton abstract-base-class
1个回答
0
投票

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

或者执行以下操作:

类AI实现:公共A

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

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

并且不要从 A 导出 B。

© www.soinside.com 2019 - 2024. All rights reserved.