gpt4 book ai didi

c++ - 如何在不复制代码的情况下克隆子类?

转载 作者:搜寻专家 更新时间:2023-10-31 01:47:03 25 4
gpt4 key购买 nike

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 函数。如果 clonePlus 之一失败,当前的实现将泄漏内存。

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 的行。

最佳答案

尝试这样的事情:

    Plus* Plus::clone() const  {
auto_ptr<Expression> tree_left_clone(tree_left->clone());
auto_ptr<Expression> tree_right_clone(tree_right->clone());
return new Plus(tree_left_clone.release(), tree_right_clone.release());
}

关于c++ - 如何在不复制代码的情况下克隆子类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19823648/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com