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

Sun*_*Liu 1 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));
Run Code Online (Sandbox Code Playgroud)

据我所知,这段代码假设将a和b加在一起,然后通过调用复制构造函数将结果多项式赋值给c.

但是,当我真正测试它时,

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

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

Mat*_*Mat 5

Polynomial Polynomial::add(const Polynomial& b)
                                           ^
Run Code Online (Sandbox Code Playgroud)

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

这可能无法解决你的崩溃问题 - 如果没有更多的代码(以及你身边的一些调试来确定它),就无法确定是什么原因造成的,但它将不再需要复制构造Polynomial参数.