复制构造函数和赋值运算符都被调用

时间:2011-11-19 01:25:37

标签: c++ constructor copy variable-assignment operator-keyword

我有以下程序片段:

Polynomial Polynomial:: add(const Polynomial b)
{
    Polynomial c;
    c.setRoot(internalAdd(root, c.root));
    c.setRoot(internalAdd(b.root, c.root));
    return c;
}

c = (a.add(b));

根据我的理解,这段代码假设将a和b一起添加,然后通过调用复制构造函数将结果多项式赋值给c。

然而,当我实际测试它时,

  • c立即调用复制构造函数并尝试复制b,
  • 然后a和b添加
  • 然后c尝试通过赋值运算符
  • 得到结果多项式
  • 然后程序崩溃

我该怎么做才能解决这个问题?

1 个答案:

答案 0 :(得分:5)

Polynomial Polynomial::add(const Polynomial& b)
                                           ^

如果您不希望复制参数,请将其作为参考传递给上面。

这可能无法解决你的崩溃问题 - 如果没有更多的代码(以及一些调试就可以找到它),无法告诉导致这种情况的原因,但它将不再需要复制构造Polynomial参数