是否可以在不实现复制构造函数的情况下执行多态深度复制? (其中一个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。