0

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.
 }
};
4

2 に答える 2

2

おそらく、C にプライベート コンストラクターを与えて、D を C のフレンド クラスにする方が適切なオプションです。

于 2011-06-09T15:28:19.227 に答える
0

工場でコピーする C オブジェクトを作成する理由はありますか?

代わりに:

C* ptr = new C();
ptr = new D(ptr);

D を C のフレンドにし、D のデフォルト コンストラクタを作成し、ファクトリには次のものしかありませんでした。

ptr = new D();

それは物事を単純化します。

于 2011-06-09T15:48:57.343 に答える