私はシングルトンであり抽象クラスです。だから、基本的に私は継承クラスの一つでインスタンス化しています。私は、保護された抽象のコンストラクタとデストラクタを持っています。私はいくつかの関数が定義を持ち、そのうちのいくつかは純粋な仮想クラスとサブクラスで、そのインターフェースにメソッドを実装する基本クラスを持っていたいが、それはシングルトンにしたい。シングルトンクラスからInheritedクラスのデストラクタを呼び出す
#include<iostream>
#include<bits/stdc++.h>
using namespace std;
class Base {
protected:
Base() {}
virtual ~Base() {
cout<< "base class destructor \n";
}
private:
static Base *instance;
public:
virtual void overrideMe() = 0;
static Base* getinstance(const char*);
static void resetInstance(){
delete instance;
}
virtual void testmethod();
};
class Derived1 : public Base{
friend class Base;
protected:
Derived1(){
cout<<" in Derived1 constructor \n";
}
virtual ~Derived1(){
cout<< "in Derived1 destructor \n";
}
public:
void overrideMe(){
cout<< "in Derived1 \n";
}
void testmethod(){
cout<< "testmethod of Derived1 \n ";
overrideMe();
}
};
class Derived2 : public Base{
friend class Base;
protected:
Derived2(){
cout<<" in Derived2 constructor \n";
}
virtual ~Derived2(){
cout<< "in Derived2 destructor \n";
}
public:
void overrideMe(){
cout<< "in Derived2 \n";
}
void testmethod(){
cout<< "testmethod of Derived2 \n ";
overrideMe();
}
};
Base* Base::instance = NULL;
void Base::testmethod() {
cout << "Testing :)\n";
}
Base* Base::getinstance(const char* type) {
if(instance == NULL){
if(std::strcmp(type, "Derived1") == 0)
instance = new Derived1();
if(std::strcmp(type, "Derived2") == 0)
instance = new Derived2();
}
return instance;
}
int main() {
Base *instanceA = Base::getinstance("Derived1");
// Derived1* ob = new Derived1();
instanceA->testmethod();
Base::resetInstance();
return 0;
}
上記と同じことを達成する良い方法はありますか?
それはあなたがインスタンス化を含むいくつかのコードを、投稿する場合はお答えする方が簡単です。 (関連性のない関数はすべてありません) – molbdnilo
副次的な点として、サブクラスのパブリックコンストラクタは、基底クラスのシングルトンを破ります。 – molbdnilo
コンストラクタ内で仮想関数を呼び出していますか? –