Powiedzmy mamy tej klasie:Jak używać łańcucha przeciążenia operatora bez modyfikowania argumentów?
class A
{
public:
int a;
A(int b)
{
a = b;
}
};
Chciałbym stworzyć A + przeciążenie taki sposób, że można go używać jak to
A a(1),b(2),c(3),&d;
d = a + b + c;
bez modyfikowania zawartości każdego obiektu. Kolejnym logicznym byłoby przydzielenie nowego fragment pamięci za każdym razem tak:
A &operator+ (const A &b)
{
A *c = new A(a+b.a);
return *c;
}
Ale to byłoby utworzyć nowy problem: wyniki pośrednie są tracone, powodując wycieki pamięci. Mogłem łatwo rozwiązać ten problem, wykonując funkcję statyczną, która pobiera trzy referencje obiektu i przechowuje sumę pierwszych dwóch w trzecim, ale jestem gotów założyć się, że musi istnieć jakiś sposób, aby uczynić + przeciążenie sposób, w jaki chcę.
Pytanie brzmi: czy istnieje jakikolwiek sposób, w jaki mogę użyć łańcucha przeciążenia operatora, który nie modyfikuje operandów bez powodowania wycieków pamięci?
+1 za unikanie ręcznego kopiowania. – Sven
Przepraszam, ale twoja odpowiedź zdaje się ignorować fakt, że konkretnie pytałem o sposób, aby nie modyfikować żadnego z obiektów operandowych –
@ user803253: Nie modyfikuję * operandów *; operandy są przekazywane jako wartość, co oznacza, że modyfikowane w funkcji są * kopie * operandów. W każdym razie, napisałem lepszy projekt, który powinieneś przyjąć. – Nawaz