我有一个函数,它获取指向超类的指针并对其执行操作.但是,在某些时候,该函数必须对输入的对象进行深度复制.有什么方法可以执行这样的副本吗?
在我看来,让函数成为模板函数,只是让用户传递类型,但我希望C提供更优雅的解决方案.
解决方法:
SpaceCowboy提出了惯用的克隆方法,但忽略了3个关键细节:
class Super
{
public:
virtual Super* clone() const { return new Super(*this); }
};
class Child: public Super
{
public:
virtual Child* clone() const { return new Child(*this); }
};
> clone是一个const方法
> clone返回指向当前类的指针,而不是基类
> clone返回当前对象的副本
第二个是非常重要的,因为它允许使用有时候你有更多类型信息而不仅仅是Super *这一事实.
此外,我通常更喜欢克隆来提供副本,而不仅仅是相同类型的新对象.否则,您使用Exemplar模式来构建新对象,但是您没有正确克隆,并且名称具有误导性.