我必须在 C++ 中实现工厂方法模式。要由工厂“组装”的类 (C) 是抽象的,并由其他类 (D) 继承。所以我不希望 C 有一个构造函数。但是要创建 D 的实例,C 必须至少有一个 protected 构造函数。但随后有人可能会从 C 派生并以这种方式创建 C 的实例。我不希望这发生。所以我创建了一个 protected 构造函数,它接受一个指向 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.
}
};
最佳答案
给 C 一个私有(private)构造函数并使 D 成为 C 的友元类可能是更好的选择。
关于抽象类的C++工厂方法模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6295248/