C++ 如何实现可克隆类?

C++ 如何实现可克隆类?,c++,design-patterns,C++,Design Patterns,请帮我理解可克隆模式。我不知道如何实现类A的构造函数、复制构造函数以及如何使用它?您首先需要区分复制构造函数和克隆模式 复制构造函数是创建类副本的构造函数 class Cloneable { public: virtual Cloneable* clone() const = 0; //return copy of itself virtual ~Cloneable() {} }; class A { public: A(const A& a); ~

请帮我理解可克隆模式。我不知道如何实现类A的构造函数、复制构造函数以及如何使用它?

您首先需要区分复制构造函数和克隆模式

复制构造函数是创建类副本的构造函数

class Cloneable
{
 public:
   virtual Cloneable* clone() const = 0; //return copy of itself
   virtual ~Cloneable() {}
};

class A
{
 public:
   A(const A& a);    
   ~A();  

 private:
   Cloneable* b;
   Cloneable* c;
   std::string* s;     
};

A::~A()  
{
 delete b;
 delete c;
 delete s;
}
您(通常)不需要自己实现它,编译器将为您创建一个所谓的隐式复制构造函数。但是,如果您需要实现(例如,因为编写一个管理资源的类),请考虑五()、

的规则。 复制构造函数不是虚拟的(事实上,构造函数从来都不是虚拟的)

克隆模式的典型用例如下:

MyClass a;
MyClass copy(a); // calls the copy constructor
现在您可以执行以下操作:

// in MyAbstractClass
virtual MyAbstractClass* clone() = 0;
// in MyHeir
virtual MyHeir * /* return type covariance */ clone() {
  return new MyHeir(*this); // call to the (implicit) copy constructor
}
// in MyHeir2
virtual MyHeir2 * /* return type covariance */ clone() {
  return new MyHeir2(*this);
}
std::unique_ptr clone=ptr1->clone();

我不同意将此标记为太宽,或“好的答案太长”。这个问题很有意义,user3684240给出了一个很好的答案。
// in MyAbstractClass
virtual MyAbstractClass* clone() = 0;
// in MyHeir
virtual MyHeir * /* return type covariance */ clone() {
  return new MyHeir(*this); // call to the (implicit) copy constructor
}
// in MyHeir2
virtual MyHeir2 * /* return type covariance */ clone() {
  return new MyHeir2(*this);
}
std::unique_ptr<MyHeir> clone = ptr1->clone();