Autor
|
Tema: Duda sobre parametros de una función C++ (Leído 3,892 veces)
|
Kaxperday
Desconectado
Mensajes: 702
The man in the Middle
|
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. lista_victimas::lista_victimas(vector<victima> _victimas) { victimas = _victimas; //copy(_victimas.begin(), _victimas.end(), back_inserter(victimas)); }
Cuando acaba un método, sus parametros se borran de memoria ¿no?. En este caso, ¿que hago, igualar punteros contenidos o que?. void funcion(lista_victimas *_lista) lista_victimas lista; //añado miembros. mvictimas->lock(); _lista = new lista_victimas(lista.obtener_victimas()); 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
Mensajes: 3.412
ASMático
|
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
Mensajes: 702
The man in the Middle
|
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: void funcion(int c)
void funcion() 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
Mensajes: 3.412
ASMático
|
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: void func(string &arg){}
Dicho esto, todo lo que se deduzca de aquí, pues así será xD ¿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
Mensajes: 702
The man in the Middle
|
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á: lista_victimas::lista_victimas(vector<victima> _victimas) { victimas = _victimas; //copy(_victimas.begin(), _victimas.end(), back_inserter(victimas)); }
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
Mensajes: 3.412
ASMático
|
Sí. Pero ahí ya no hay punteros en ningún lugar. Solo copias.
|
|
|
En línea
|
|
|
|
Kaxperday
Desconectado
Mensajes: 702
The man in the Middle
|
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
Mensajes: 3.412
ASMático
|
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
Mensajes: 702
The man in the Middle
|
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
Mensajes: 3.412
ASMático
|
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
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
[resuelto] duda sobre uso de byval y strptr en parametros string
Programación Visual Basic
|
Arconte
|
2
|
3,285
|
10 Diciembre 2011, 21:12 pm
por Arconte
|
|
|
Duda: ¿Como especificar parámetros dentro de estructuras de una función?
ASM
|
.:UND3R:.
|
2
|
3,743
|
13 Mayo 2012, 18:53 pm
por .:UND3R:.
|
|
|
[Duda] Como trabajar una variable en una función cuyos parametros son "Elipsis"
Programación C/C++
|
Zodiak98
|
1
|
3,326
|
10 Julio 2013, 03:15 am
por rir3760
|
|
|
[Duda] Parámetros de una función javascript
Desarrollo Web
|
MA40
|
3
|
2,639
|
5 Julio 2021, 20:05 pm
por Danielㅤ
|
|
|
Duda sobre cómo pasar parámetros a una función
PHP
|
KateLibby
|
7
|
5,949
|
6 Octubre 2022, 09:31 am
por KateLibby
|
|