在 C 中复制多态对象
使用多态对象时,通常需要创建对象的深层副本。然而,当编译时具体的派生类类型未知时,使用复制构造函数和重载运算符=的传统方法可能不适合。
克隆方法方法
一种常见的方法是在基类中实现虚拟克隆方法。然后,每个派生类实现其自己的 Clone 版本,该版本创建特定派生类的新实例并复制数据成员。
示例:
class Base { public: virtual Base* Clone() = 0; }; class Derivedn : public Base { public: Derivedn* Clone() { Derivedn* ret = new Derivedn; copy all the data members return ret; } };
协变返回类型
但是,有一种更惯用的 C 方法处理这个:协变返回类型。这允许派生类从 Clone 方法返回指向其自己类型的指针。
修订示例:
class Base { public: virtual Base* Clone() = 0; }; class Derivedn : public Base { public: // Covariant return type, returns Derivedn* Derivedn* Clone() { return new Derivedn(*this); } private: Derivedn(const Derivedn&); // Copy constructor (possibly implicit or private) };
通过使用协变返回类型,复制构造函数隐式地用于创建派生类的新实例。这简化了实现并避免了显式成员复制的需要。
以上是如何有效地深度复制 C 中的多态对象?的详细内容。更多信息请关注PHP中文网其他相关文章!