C ++ --- Polymorphic Deep copy

时间:2017-11-20 15:07:47

标签: c++ class polymorphism deep-copy

是否可以在不实现复制构造函数的情况下执行多态深度复制? (其中一个TA表示没有必要实现复制构造函数)

“假设你希望能够复制一个表达式对象。问题是,如果你拥有的只是一个表达式指针,你不知道你实际拥有什么样的对象,更不用说什么类型的它的字段可能指向的对象。给定一个表达式指针设计一种方法,以生成它所指向的对象的精确(深层)副本。“

基类表达式没有字段。 但其中一个子类包含一个整数字段,另一个子类包含表达式指针字段。

我尝试为每个派生对象创建这个虚方法:

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

ExpressionBinaryOper类:

class ExpressionBinaryOper : public Expression {
    public:
ExpressionBinaryOper(Expression *left, Expression *right, const string 
    &op);
~ExpressionBinaryOper();
virtual ExpressionBinaryOper *clone() const
  {return new ExpressionBinaryOper(*this);}
void set(string name, int v);
void unset(string name);
string evaluate();
string prettyprint();

private:
    Expression *left;
    Expression *right;
    string oper;
};

制作克隆:

 Expression *theCopy = exp->clone(); //exp is a Expression pointer.

但删除“克隆指针”后,删除了exp。

0 个答案:

没有答案