****** NOTA SU PAGINA 32 ****** ****** Operator Functions ****** Nella pagina e' riportato il seguente esempio di codice, che diversamente da quanto detto durante la lezione di lunedi' 25 ottobre e' assolutamente CORRETTO: Vector2D& operator*=(Vector2D& v,float f) { v = Vector2D(v.getX()*f,v.getY()*f); return v; } Durante la stessa lezione, infatti, e' stato detto che il codice suddetto e' "sbagliato", con la motivazione, suggerita anche da qualche studente sia in aula che in remoto, che "la funzione restituisce una reference ad un oggetto che viene distrutto al termine della funzione stessa". Questo pero' NON E' VERO, perche' viene restituito un argomento della funzione stessa anch'esso passato per reference, che quindi NON VIENE CANCELLATO al termine della funzione. L'errore nel giudicare sbagliato un codice che e' invece corretto deriva probabilmente da una confusione nella lettura del codice stesso, simile al seguente che invece e' EFFETTIVAMENTE SBAGLIATO: Vector2D& operator*=(Vector2D& v,float f) { Vector2D v(v.getX()*f,v.getY()*f); return v; } In questo secondo caso infatti viene CREATO un nuovo oggetto locale di cui si restituisce una reference ma l'oggetto viene poi distrutto al termine della funzione, ed infatti il compilatore (gcc) emette un warning. Per completezza si deve osservare che in questo caso la creazione del nuovo oggetto v nasconde il parametro che ha lo stesso nome, ed infatti il compilatore da' un messaggio di errore e non produce un eseguibile.