抽象类的C++工厂方法模式

标签 c++ abstract-class factory information-hiding

我必须在 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/

相关文章:

c++ - 为什么在返回对象 Mat 时堆损坏?

java - Python 相当于 Java 抽象类吗?

ruby-on-rails - FactoryGirl/Bot 图像定义

c++ - 是否可以在 C++ 中使用小程序

c++ - 在其他机器上运行 EXE 文件请求管理员权限

c++ - 迭代器实际上指向容器中的什么?

java - 抽象方法和带有 UnsupportedException 的方法哪个更好?

c# - 在 Inherited Class Constructor C# 中强制部分基初始化(和方法)(就像抽象对方法所做的那样)——解决这个问题

java - 工厂设计模式与OCP(开闭原则)的违反

java - Typescript 中的工厂模式并仅公开工厂类