Diciamo che abbiamo questa classe A:Come si utilizza una catena di overload dell'operatore senza modificare gli operandi?
class A
{
public:
int a;
A(int b)
{
a = b;
}
};
Vorrei creare un sovraccarico di + tale che ho potuto usare in questo modo
A a(1),b(2),c(3),&d;
d = a + b + c;
senza modificare il contenuto di ciascun oggetto. La prossima cosa più logica sarebbe l'assegnazione di una nuova porzione di memoria ogni momento come questo:
A &operator+ (const A &b)
{
A *c = new A(a+b.a);
return *c;
}
Ma questo creerebbe un nuovo problema: risultati intermedi sono persi, causando perdite di memoria. Avrei potuto facilmente risolvere questo problema creando una funzione statica che prende tre riferimenti A object e memorizza la somma dei primi due nel terzo, ma sono disposto a scommettere che ci deve essere un modo per fare + sovraccaricare il modo che voglio
Quindi la domanda è: esiste un modo per utilizzare una catena di overload dell'operatore che non modifichi gli operandi senza causare perdite di memoria?
+1 per evitare la copia manuale. – Sven
scusa ma la tua risposta sembra aver ignorato il fatto che mi stavo chiedendo in particolare un modo per non modificare nessuno degli oggetti operando –
@ user803253: Non modifico gli * operandi *; gli operandi vengono passati come valore, il che significa che le modifiche apportate alla funzione sono * copie * degli operandi. Ad ogni modo, ho pubblicato un design migliore che dovresti adottare. – Nawaz