Hola, quisiera saber si hay algun comando o función para cerrar o destruir objetos que se queden abiertos en memoria en fivewin harbour
Gracias,
Jun Fco. Vásquez M.
Rep. Dom.
Hola, quisiera saber si hay algun comando o función para cerrar o destruir objetos que se queden abiertos en memoria en fivewin harbour
Gracias,
Jun Fco. Vásquez M.
Rep. Dom.
En los lenguajes interpretado es el recolector de basura el que se encarga de ese trabajo.
Si se declara un objeto local y te sales de la funcion donde está definido el sólo se descarga.
Puedes también asignarle null asà miObj := null.
El problema es cuando el objeto crea algún recurso externo que conlleve una reserva de memoria que debe ser destruido.
Por ejemplo un objeto tipo DataSource que abre una DBF por ejemplo, aunque se destruya el objeto la dbf sigue abierta salvo que la clase tenga un método que se encargue de cerrarla explicitamente, tipo miObj:Close()
Por suerte las versiones recientes de Harbour tienen el metodo destructor que tu puedes implementar y que será llamado cuando el recolector de basura lo elimine de la memoria.
Si la clase la construyes tu puedes hacer uso a bajo nivel del recolecto de basura y prevenirlo que tiene que liberar el recurso cuando libere el objeto.
También puedes usar la funcion en c hb_gcGripDrop().
Seguramente Antoni Linares, si tiene tiempo podrÃa extenderse un poco más... ![]()
Manu,
lo has explicado muy bien ![]()
Solo falta explicar un poco más el uso de esas funciones en C a bajo nivel, pero que solo en casos muy puntuales puede hacer falta el usarlas. El objetivo de esas funciones es precisamente evitar que el recolector de basuras intervenga en algunos casos en los que interese.