C++ 如何实现可克隆类?
请帮我理解可克隆模式。我不知道如何实现类A的构造函数、复制构造函数以及如何使用它?您首先需要区分复制构造函数和克隆模式 复制构造函数是创建类副本的构造函数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); ~
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();