Как использовать цепочку перегрузок операторов без изменения операндов?

Допустим, у нас есть этот класс A:

class A
{
public:
   int a;

   A(int b)
   {
      a = b;
   }
};

Я хотел бы создать перегрузку +, чтобы я мог использовать его вот так

A a(1),b(2),c(3),&d;
d = a + b + c;

без изменения содержимого каждого объекта. Следующей логичной вещью было бы выделение нового блока памяти каждый раз, как это:

A &operator+ (const A &b)
{
   A *c = new A(a+b.a);
   return *c;
}

Но это создало бы новую проблему :промежуточные результаты теряются, вызывая утечки памяти. Я мог бы легко решить эту проблему, создав статическую функцию, которая принимает три ссылки на объект A и сохраняет сумму первых двух в третьей, но я готов поспорить, что должен быть какой-то способ заставить + перегрузка происходить так, как Я хочу.

Итак, вопрос :в том, можно ли как-то использовать цепочку перегрузок операторов, которые не изменяют операнды, не вызывая утечек памяти?

6
задан Kang Min Yoo 28 April 2012 в 03:07
поделиться