对派生类执行深度复制

Performing a deep copy on derived classes

本文关键字:深度 复制 执行 派生      更新时间:2023-10-16

这件事最近一直困扰着我。假设我有一个基类base。如果我在Base之上有多个派生类,比如DerivedA和DerivedB,那么深度复制会很麻烦。

OtherClass(const OtherClass & _rhs)
{
    //I have a list of Base *, now I must assign a class id to each derived class to properly create a new one.
    //...
}

有什么办法绕过这个吗?

您应该在基类中定义一个克隆方法:

virtual Base * clone() const = 0;

每个派生类实现该克隆方法:

virtual DerivedA * clone() const {
    return new DerivedA(*this);
}

然后,您的OtherClass只需要在列表中的每个Base*实例上迭代并调用clone方法。