C++ でファクトリ メソッド パターンを実装する必要があります。ファクトリによって「アセンブル」されるクラス (C) は抽象クラスであり、他のクラス (D) によって継承されます。だから私はCにコンストラクターを持たせたくありません。ただし、D のインスタンスを作成するには、C に少なくとも保護されたコンストラクターが必要です。しかし、誰かが C から派生し、この方法で C のインスタンスを作成する可能性があります。私はこれが起こることを望んでいません。そこで、派生クラスが使用する C オブジェクトへのポインターを受け取る保護されたコンストラクターを作成しました。コードは以下のとおりです。問題は、それがこの問題に対処する正しい方法であるかどうかです。
class C {
private:
C() {}
protected:
C(const C* c) {}
friend class CFactory
};
class D: public C
{
private:
D(const C* c): C(c) {}
friend class CFactory;
};
class CFactory
{
public:
static C* createC() {
C* ptr = new C();
ptr = new D(ptr); // There is garbage collection on the project, so no memory leak.
}
};