FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
||||
|
||||
Liberación de un TstringList
Hola amig@s,
Me gustaría saber vuestra opinión sobre la forma correcta de asignar un objeto y su liberación; Creo que es una pregunta seguramente muy simple, pero bueno... En el método 1, al ser una variable local de un procedimiento ¿Se liberarían los recursos si hubiese alguna excepción después de la asignación?, ¿o debemos forzar con el segundo método siempre? Tenemos la siguiente función que delimita una cadena de texto:
|
#2
|
||||
|
||||
Cita:
Además Delphi te provee un método para revisar esto: En el DPR añade la siguiente línea:
Al ejecutar tu programa con estos 2 método al acabar saldrá una ventana como estas: En ambos casos ves que estás perdiendo memoria. Una solución correcta (para no perder memoria) aunque en mi opinión tampoco correcta del todo, sería esta:
En este último caso no aparece la venana de pérdida de memoria, aunque comento que NO es correcta en mi opninión, porque yo tengo una máxima: "Quien crea un opbjeto es el encargado de liberarlo" Así que siguiendo esas indicaciones un código correcto para mi, sería este:
Hay otras si sigues el mismo "precepto"...
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. Última edición por Neftali [Germán.Estévez] fecha: 08-02-2018 a las 16:00:41. |
#3
|
||||
|
||||
Buenos días Neftali [Germán.Estévez]; [duilioisola]
Muchas gracias por tomaros la molestia de contestar. Todos los días se aprende algo aquí, no conocía este truco para comprobar las pérdidas de memoria, a mi pesar, sigo “abusando” del showmessage como forma de depuración principal...algo arcaico, ya lo sé. Queda claro que la forma más elegante y segura de gestionar el objeto es creándolo y liberándolo en el mismo procedimiento, y pasando éste por referencia al procedimiento que solo estará encargado establecer la delimitación del texto; también la necesidad de asegurar el constructor con un try except en caso de usar la función como originalmente. Muchas gracias! En el DPR añade la siguiente línea:
Última edición por Neftali [Germán.Estévez] fecha: 12-02-2018 a las 08:36:59. Razón: Corregir TAGs de Delphi |
#4
|
||||
|
||||
El método 2 no libera al primer St Creado.
Al método 1 le agregué el TRY..FINALLY por si falla algo entre que se crea y se libera.
De todos modos, a mi me gusta mas crear los objetos y pasárselo a los procedimientos para que los rellenen. Por ejemplo le puedes pasar la lista de items de un componente TCombo... para que te lo rellene.
Según tu ejemplo sería algo asi:
|
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Liberación de versiones de Delphi | Neftali [Germán.Estévez] | La Taberna | 1 | 06-10-2016 10:35:13 |
Liberación de memoria de Tbitmap | Marck Silencer | Gráficos | 11 | 27-01-2011 08:29:06 |
Liberación de un Form No Modal | vejerf | OOP | 1 | 06-09-2010 19:41:20 |
Día mundial por la liberación de la cannabis. | poliburro | La Taberna | 54 | 10-05-2008 04:55:56 |
Liberación de memoria | Jome | OOP | 5 | 22-02-2007 14:44:56 |
|