复制构造函数和赋值操作符都被调用

Copy constructor and assignment operator both get called

本文关键字:调用 赋值操作符 构造函数 复制      更新时间:2023-10-16

我有以下程序片段:

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尝试通过赋值运算符
  • 获得结果多项式
  • 则程序崩溃

我能做些什么来解决这个问题?

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

如果你不希望参数被复制,就像上面那样作为引用传递。

这可能不会修复您的崩溃—没有更多的代码(以及您这边的一些调试来查明它),没有办法告诉是什么导致的,但它将消除复制构造多项式参数的需要。