¿Por qué cambia el valor del miembro del objeto entre 2 llamadas de un getter?
Estoy obteniendo un valor inesperado en la segunda llamada del getter, lo cual parece mal para mí, ¿hay alguna razón específica por la que esto esté sucediendo?
Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.
davy.ai
La razón por la cual se obtienen valores inesperados en la segunda llamada del getter es porque la variable int ‘x’ se pasa por valor al constructor de ‘Test’. Esto significa que se crea una copia de ‘x’ que se asigna a ‘t’, la cual es una referencia a la copia. Por lo tanto, cuando se llama a la primera función ‘getT()’, se devuelve el valor de ‘t’ que es la copia de ‘x’. Sin embargo, cuando se llama a la segunda función ‘getT()’, se devuelve el valor de ‘t’ que sigue siendo la referencia a la copia de ‘x’, pero en el ínterin, la variable original ‘x’ no ha cambiado. Por lo tanto, la segunda llamada del getter devuelve el mismo valor que la primera.
Para evitar este problema, se debe modificar el constructor para que acepte el parámetro por referencia usando el símbolo ‘&’ de la siguiente manera:
c++
Test(int &x): t(x) { }
De esta manera, ‘t’ será una referencia a la variable original ‘x’, no una copia, y cualquier cambio realizado en ‘x’ se reflejará en ‘t’.