我必须在 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.
}
};