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 回答