FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Liberar memoria en una lista
a) Tengo una clase TObject que se llama "miClase".
b) Esta tiene, entre otras, una variable de tipo TStringList (ej: "mistrings") c) A su vez trabajo con ellas con una lista de objetos miClase (de nombre: miLista) Supongan que llega el momento de eliminar un ítem de la lista (con todos sus elementos ya creados y utilizados. Para ello utilizaría el metodo delete: Código:
miClase(miLista.Items[i]).Delete; Por otra parte: debo liberar el stringlist promero o al liberar el objeto ya se libera la memoria del stringlist incluido. En concreto, es correcto esto? Código:
miClase(miLista.Items[i]).mistrings.free; //libero mem de la variable tstringlist miClase(miLista.Items[i]).Delete; //borro el elemento miClase(miLista.Items[i]).Free; //libero mem del elemento |
#2
|
||||
|
||||
Hasta donde recuerdo, debes hacer el Free de cada objeto de la lista, desde luego antes que el Delete. Y antes del Free debes también liberar el StringList.
En resumen: no hay atajos Debes liberar todo. Siempre. Lo que te puede ahorrar un poco es usar un TObjectList en lugar de un TList para la lista de objetos miClase. El TObjectList se encarga de liberar la memoria de cada objeto. Eso sí, cada objeto aún debe liberar lo que tenga dentro, como el StringList. Eso debe hacerlo en la redefinición del destructor Destroy. // Saludos |
#3
|
|||
|
|||
ok, gracias
|
#4
|
||||
|
||||
Mira lo de liberar la memoria lo hace el free. Quisas el delete llame internamente el free(Tendria que ojear el codigo haber como lo hace).
Pero lo que si estoy seguro es que es c++ cuando liberas memoria con free siempre queda un poco de basura y cuando lo haces con delete se libera un poco mas de memoria. Aunque haorita jamas te darias cuanta. Por que con las capacidades de los equipos ahorita no se nota la diferencia.
__________________
Todo se puede, que no exista la tecnología aun, es otra cosa. |
#5
|
||||
|
||||
Disculpa pero esto no tiene pies ni cabeza. Free y Delete no tienen nada que ver y no se trata de si uno libera un poco más de memoria que el otro. Delete simplemente elimina una entrada de la lista, pero esa entrada no es mas que un apuntador. Si éste apunta a un objeto, tal objeto habrá que liberarlo también con Free. Pero puede apuntar a otra cosa que se haya asignado memoria de otra manera como GetMem y habrá que liberalo con FreeMem.
Y decir que no se nota la diferencia con los equipos de ahora es francamente irresponsable. No importa cuanta memoria tengas, si tu aplicación tiene pérdidas de memoria, el uso continuo eventualmente puede dejar sin recursos al sistema. Jamás debe pasarse por alto este aspecto. // Saludos |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Liberar dll de memoria | lgarcia | Internet | 1 | 11-08-2005 00:26:29 |
Liberar Memoria | JoseQ | Varios | 6 | 16-07-2004 18:49:21 |
Liberar Memoria | susje | Varios | 3 | 31-07-2003 23:18:18 |
Liberar memoria del HDC | joecool | Gráficos | 2 | 17-05-2003 00:28:51 |
Liberar Memoria | JODELSA | Varios | 4 | 13-05-2003 17:39:05 |
|