Я должен реализовать шаблон метода фабрики в 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.
}
};