es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Tags:  , , ,

Answer

  1. Avatar for 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’.

Comments are closed.