Копировать конструктор и оператор присваивания - PullRequest
1 голос
/ 19 ноября 2011

У меня есть следующий фрагмент программы:

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 Ответ

5 голосов
/ 19 ноября 2011
Polynomial Polynomial::add(const Polynomial& b)
                                           ^

Если вы не хотите, чтобы аргумент копировался, передайте его как ссылку, как указано выше.

Это, вероятно, не исправит ваш сбой - невозможно определить причину этого без большего количества вашего кода (и некоторой отладки на вашей стороне, чтобы точно его определить), но это устранит необходимость в создании копии аргумента Polynomial .

...