类 Plus 继承自类 Expression。
class Expression
{
public:
virtual Expression* clone() const = 0;
};
class Plus : public Expression
{
public:
Plus( Expression* lhs, Expression* rhs ) :Expression( lhs, rhs) {};
Plus* clone() const;
};
我正在实现一个copy
功能。clone
如果s 或 s之一Plus
失败,当前实现将泄漏内存。
Plus* Plus::clone() const {
return new Plus(tree_left->clone(), tree_right->clone());
}
我认为这样的事情可以解决问题:
Plus* Plus::clone() const {
Expression *tree_left_clone = nullptr;
Expression *tree_right_clone = nullptr;
Expression *plus_clone = nullptr;
try {
tree_left_clone = tree_left->clone();
tree_right_clone = tree_right->clone()
plus_clone = new Plus( tree_left_clone, tree_right_clone );
} catch (const bad_alloc& e ) {
delete tree_left_clone;
delete tree_right_clone;
delete plus_clone;
}
return plus_clone;
}
但是有很多类似的运算符,包括 Minus、Times、Divided、Power 等。我必须clone
为所有这些运算符复制。有没有办法把这段代码放进去Expression
?我遇到的问题是clone
包含new Plus
.