Programación General > C/C++
La variable local no se destruye?
player_:
Muchas gracias a los 2, ya entiendo lo que pasa. Ya veo que lo de mi ejemplo ha sido simple casualidad y eso me ha hecho hacerme un lío.
Saludos.
Eternal Idol:
De nadas B)
alb:
C++ te da la garantia que à salir de la funcion el destructor de todas las variables locales son llamado. Con los tipos triviales (int, short, char, *, ...) no hay destructor pero el principio es igual.
Pero en cuanto de que pasà a la memoria reservada para esas variables es un comportamento indeterminado. Es decir que puede quedarse tal que en la funcion, cambiar de valor, o explotar ;)
La nocìon de pila (stack) o de heap no existe en la norma de C ni de C++. Es un detalle que releva del systema (processor + Operating System).
jarv:
alb... encontre muy interesante y clara tu explicacion, pero... sucede lo mismo con todos los lenguajes de programacion??? te lo pregunto porque, por ejemplo, en otros lenguajes existen instrucciones para "destruir" las variales... ejemplo... en Visual Basic o VBScript (el ultimo para programar en ASP) cuando declaras una variable del tipo objeto haces un Set variable = objeto y en rigor al dejar de utilizarla haces un Set Variable = nothing, en esta ultima instruccion "liberas" la memoria, por tanto cabe la pregunta, que pasa si no utilizas en Set variable = nothing??? la memoria queda ocupada, y por ende a la larga, podria implicar una disminucion en la cantidad de memoria disponible??? pensemos en una aplicacion web en la que hay 100 usuarios concurrentes...
bueno, desde ya, gracias por tus comentarios
m0skit0:
--- Cita de: "jarv" ---pero... sucede lo mismo con todos los lenguajes de programacion???
--- Fin de la cita ---
No conozco ninguno en el que no se destruyan las variables locales al salir de su ámbito, básicamente porque se reservan en la pila y la pila se "vacía" al salir del ámbito local.
--- Cita de: "jarv" ---ejemplo... en Visual Basic o VBScript (el ultimo para programar en ASP) cuando declaras una variable del tipo objeto haces un Set variable = objeto y en rigor al dejar de utilizarla haces un Set Variable = nothing
--- Fin de la cita ---
Visual Basic es un lenguaje básicamente horrible, dado que introduce malísimas prácticas de programación, entre ellas pensar que asignando a una variable a nothing la estás liberando. Esto no es así, y sí, en VB también las variables tienen vida local, es decir, no hace falta asignarles a nothing para que se liberen. De hecho existe un modificador (static) para mantenerlas, por tanto sin ese modificador se liberan. Como te digo esto es debido a que en x86 las variables locales se reservan en la pila.
Esto obviamente no aplica para memoria reservada explícitamente (mediante una llamada a malloc() por ejemplo) dentro de una función. Éstas deben ser liberadas manualmente.
Navegación
[*] Página Anterior
Ir a la versión completa