elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Únete al Grupo Steam elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Duda sobre parametros de una función C++
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Duda sobre parametros de una función C++  (Leído 3,892 veces)
Kaxperday


Desconectado Desconectado

Mensajes: 702


The man in the Middle


Ver Perfil WWW
Duda sobre parametros de una función C++
« en: 14 Octubre 2015, 10:19 am »

La pregunta es, ¿cual de las 2 debería de hacer?

¿En este caso sería indiferente verdad?, puesto que vector<victima> _victimas es fijo, cuando lo paso como parametro reserva memoria en el metodo, y si hago cambios fuera del método no afectan al argumento que he pasado ¿no?, distinto de si fuera un puntero.

Código
  1. lista_victimas::lista_victimas(vector<victima> _victimas)
  2. {
  3. victimas = _victimas;
  4. //copy(_victimas.begin(), _victimas.end(), back_inserter(victimas));
  5. }

Cuando acaba un método, sus parametros se borran de memoria ¿no?. En este caso, ¿que hago, igualar punteros contenidos o que?.

Código
  1. void funcion(lista_victimas *_lista)
  2. lista_victimas lista;
  3. //añado miembros.
  4. mvictimas->lock();
  5. _lista = new lista_victimas(lista.obtener_victimas());
  6. mvictimas->unlock();

Ese código , asignaría en _lista otro puntero en la heap, pero que ocurriría con el que ya había.

Si en cambio igualo _lista = &lista; al perderse &lista al salir de la funcion que ocurriría con _lista despues?.

Saludos, estoy algo liado.


« Última modificación: 14 Octubre 2015, 10:26 am por Kaxperday » En línea

Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Duda sobre parametros de una función C++
« Respuesta #1 en: 14 Octubre 2015, 16:15 pm »

Ese código , asignaría en _lista otro puntero en la heap, pero que ocurriría con el que ya había.

Si en cambio igualo _lista = &lista; al perderse &lista al salir de la funcion que ocurriría con _lista despues?.

El que había, seguirá existiendo. Pero el que tu creas, si no lo liberas en esa misma función, se quedará sin liberar, ocupando memoria.

Si igualas _lista a &lista, nuevamente no estarás haciendo nada. Simplemente, _lista apuntará a lista.


En línea

Kaxperday


Desconectado Desconectado

Mensajes: 702


The man in the Middle


Ver Perfil WWW
Re: Duda sobre parametros de una función C++
« Respuesta #2 en: 14 Octubre 2015, 18:01 pm »

El que había, seguirá existiendo. Pero el que tu creas, si no lo liberas en esa misma función, se quedará sin liberar, ocupando memoria.

Claro pero al no haberlo declarado en la heap al salir de la función desaparecerá de memoria, ¿en ese caso apuntaría a null el que le paso de parámetro no?.

También, quería confirmar si cuando le pasas un parametro como una string a una función (toda aquella variable que no sea puntero), al pasarselo ¿es como si la hubieramos declarado en la función no?

Ejemplo:

Código
  1. void funcion(int c)

Código
  1. void funcion()
  2. int c

Es lo mismo no?, ambas memorias se eliminan al salir de la función no?.

Si en cambio es un puntero del que hemos reservado memoria ya se que no que sigue, pero como ya digo si es una variable que recibe de parametro, cuenta como una variable de la misma función no es así?.

Saludos y gracias.
En línea

Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Duda sobre parametros de una función C++
« Respuesta #3 en: 14 Octubre 2015, 20:50 pm »

Son muchas preguntas, así que mejor una respuesta general xD

Todo lo que definas en un determinado ámbito (Ej. una función, un bucle, un par de llaves...), se destruirá al salir de ese ámbito, a excepción de variables globales y campos static. Los parámetros de una función están dentro del ámbito de la función.

Pasar un parámetro lo único que hace es copiarlo. Si pasas una clase, llamas al constructor de copia. La excepción es pasar parámetros por referencia de este modo:

Código
  1. void func(string &arg){}

Dicho esto, todo lo que se deduzca de aquí, pues así será xD

Citar
¿En ese caso apuntaría a null el que le paso de parámetro no?

El que le pasas de parámetro, es un puntero. En ningún momento, los cambios que le hagas al puntero, se verán fuera de la función. Solo se verán los cambios que le hagas al objeto apuntado, que no es el caso del ejemplo que pusiste.

Así que no, no apuntará a NULL. E incluso en otro tipo de planteamiento, aunque se destruya un objeto, los punteros que apunten a él seguirán apuntando a la misma dirección de memoria (sería de hecho absurdo que el programa buscase todos los punteros a ese objeto y los igualase a NULL)
En línea

Kaxperday


Desconectado Desconectado

Mensajes: 702


The man in the Middle


Ver Perfil WWW
Re: Duda sobre parametros de una función C++
« Respuesta #4 en: 16 Octubre 2015, 09:52 am »

Buenas socio, si es lo que pensaba que lo copiaba el problema es donde se guarda la variable que lo copia, porque si al salir del método pierde el valor y estoy igualando lo que tiene a un puntero, entonces cuando salga se debería de perder, es un poco para comprender como funciona el compilador mejor.

Creo que esto funcionará:

Código
  1. lista_victimas::lista_victimas(vector<victima> _victimas)
  2. {
  3. victimas = _victimas;
  4. //copy(_victimas.begin(), _victimas.end(), back_inserter(victimas));
  5. }

Saludos.
En línea

Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Duda sobre parametros de una función C++
« Respuesta #5 en: 16 Octubre 2015, 10:18 am »

Sí. Pero ahí ya no hay punteros en ningún lugar. Solo copias.
En línea

Kaxperday


Desconectado Desconectado

Mensajes: 702


The man in the Middle


Ver Perfil WWW
Re: Duda sobre parametros de una función C++
« Respuesta #6 en: 16 Octubre 2015, 11:14 am »

Sí. Pero ahí ya no hay punteros en ningún lugar. Solo copias.

Claro pero esa copia se almacena en algun lugar, ocupa memoria, por eso digo que si igualo las direcciones de memoria como puse, al salir la copia se pierde, entonces el puntero que apunta a la dirección de memoria de la copia al salir de pierde su valor. ¿no? XD


« Última modificación: 16 Octubre 2015, 11:20 am por Kaxperday » En línea

Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Duda sobre parametros de una función C++
« Respuesta #7 en: 16 Octubre 2015, 13:42 pm »

Claro pero esa copia se almacena en algun lugar, ocupa memoria, por eso digo que si igualo las direcciones de memoria como puse, al salir la copia se pierde, entonces el puntero que apunta a la dirección de memoria de la copia al salir de pierde su valor. ¿no? XD
Esa copia se almacena, desde luego. La direccion de memoria del parámetro que pusiste ahí es la dirección de la variable dentro de la función. Es una variable nueva, copiada de la que le pasaste por parámetro.

Lo que le hagas a esa variable, no afectará al resto de lprograma, como regla general.
En línea

Kaxperday


Desconectado Desconectado

Mensajes: 702


The man in the Middle


Ver Perfil WWW
Re: Duda sobre parametros de una función C++
« Respuesta #8 en: 16 Octubre 2015, 13:45 pm »

Claro lo que digo es cuando esa memoria que es la copia del parámetro se libera, pues si igualo su dirección de memoria a un puntero, cuando se libere el puntero no tendrá nada, pues no habrá nada en esa dirección de memoria.
En línea

Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Duda sobre parametros de una función C++
« Respuesta #9 en: 16 Octubre 2015, 15:06 pm »

Claro lo que digo es cuando esa memoria que es la copia del parámetro se libera, pues si igualo su dirección de memoria a un puntero, cuando se libere el puntero no tendrá nada, pues no habrá nada en esa dirección de memoria.
Aja xD
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines