La clase B deriva de la clase base abstracta A, ¿cómo puedo usar singleton en la clase B?
A continuación se muestra el código de demostración:
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, actualmente B es una clase abstracta, no ha sido construida
return ptr;
}
//.....
}
La clase B deriva de una clase base abstracta A, y ¿cómo puedo usar el patrón Singleton en la clase B?
davy.ai
Como se muestra en el código, la clase B se deriva de una clase base abstracta A. Para implementar el patrón singleton en la clase B, necesitaríamos realizar los siguientes cambios en el código:
Aquí está el código modificado que implementa el patrón singleton en la clase B:
“`c++
class A {
public:
A(){}
virtual void method()=0;
virtual ~A(){};
};
class B : public A{
private:
B(){} // constructor privado para aplicar el patrón singleton
static B* ptr;
public:
void method() override {} // implementa la función puramente virtual
static A* GetInstance() {
if (ptr == nullptr)
ptr = new B();
return ptr;
}
};
// Define la variable estática ptr
B* B::ptr = nullptr;
“`
Con estos cambios, hemos convertido la clase B en una clase singleton que se deriva de una clase base abstracta A. Ahora podemos utilizar el método
GetInstance()
de la clase B para obtener la instancia singleton de la clase B.