2011-07-01 17 views
7

Tengo una lista TObject (FileEventObjects := TObjectList.Create(True);) que contiene uno o más objetos. Los objetos deben permanecer en la lista hasta que se procesen. (La lista de objetos existe para la duración de la aplicación.)Delphi Eliminar un objeto de TObjectList

No estoy del todo seguro de cómo eliminar un objeto procesado de la lista.

¿El objeto se 'liberados' si hago FileEventObjects.Delete(i)

¿Hay enlaces a ejemplos útiles de TObjectLists en acción?

Saludos, Pieter.

+1

Si alguna vez curiosidad por saber si un objeto se está liberado, agregue esta línea al destructor: OutputDebugString ('Freeing TMyclassName'); Lo verá en el registro de eventos cada vez que se llame. O establezca un punto de interrupción en TMyclassName.Destroy. Incluso puede encender el detector de fugas de memoria de Fast MM, y recibirá advertencias sobre objetos que no se liberaron correctamente. –

Respuesta

12

Si pasa True a la TObjectList constructor (que también True por defecto es), la lista libera cualquier objeto tan pronto como se lo quita de la colección, no importa si usted utiliza Delete, Remove o Clear.

Aparte de esto, TObjectList se puede utilizar al igual que TList.

+0

Tenía miedo de responder a este, ya que no sabía si lo liberaba cuando usaba esos funcs. Gracias por aclarar eso, +1 :) – Jeff

+15

Puede usar '.Extract()' para eliminar un objeto de la lista sin liberarlo. –

+0

Gracias por la pronta respuesta. –

4

siempre se acuerdan de bucle hacia atrás como

for i := Pred(objectlist.Count) downto 0 do 
begin 
    objectlist.items[i].process; 
    objectlist.delete(i); 
end; 

si bucle de 0 a contar -1, mientras que la eliminación de elementos obtendrá violaciónes de acceso

+2

Sí, ayer lo descubrí por las malas. –

Cuestiones relacionadas