Caro Romario,

  Esse help sobre Free não é particularmente sobre o método Free de
TList, e sim da classe TObject. Se você observar, é um método público
derivado de TObject para todos os seus decendentes.
  O help nos alerta para, na criação de novos objetos, não chame
Destroy, ou destrutor de sua classe diretamente. Crie um método Free,
desaloque as memórias que você alocou que não tem proprietário (como
as que você criou para cada ponteiro do TList), e só assim invoque
"inherited Free", i.e., chame o método Free da classe pai.
  Em outras palavras, o Free da classe Pai, herdado pelo seu
componente, não pode destruir o que você criou sem referêcia de
objetos. Se você está utilizando uma instância do objeto TList, sua
lista não é responsável pelas referências de memórias criadas por
você.
  Um exemplo: eu utilizo TList como lista de inteiros. Se, ao chamar
Free, ele fosse desalocar o conteúdo de cada Item, eu ia obter Access
Violation porque nenhum item é um apontador de memória, mas é
diferente de nil. E isso não acontece. O que você coloca no TList não
é de responsabilidade dele, e sim sua. Implemente um procedimento para
liberar tudo, como:

procedure TForm1.LiberaLista(Lista: TList);
begin
  if (Lista <> nil) then
  begin
    while Lista.Count > 0 do
    begin
      if (Lista.Items[0] <> nil) Then
        // Chame Free se for lista de objetos
        // ou Dispose para memória alocada com New

      Lista.Delete(0);
    end;
  end;
end;
--------------------------------------------------------------------

Nielsen

Em 15/04/05, Romario (Listas)<[EMAIL PROTECTED]> escreveu:
> 
> No help está escrito o seguinte:
> 
> - TList.Free;
> 
> Use Free para destruir um objeto. Free chama automaticamente o
> destructor se o objeto referenciado não for nil. Qualquer objeto
> instanciado em runtime que não tem um proprietário deve ser destruído
> pelo Free de modo que possa ser desfeito corretamente e sua memória
> liberada. Ao contrário do Destroy, Free é bem sucedido mesmo que o
> objeto seja nil; assim se o objeto nunca for inicializado, Free não
> resultará em um erro.
> 
> - TList.Destroy;
> 
> Não chame Destroy diretamente. Em seu lugar, chame Free. Free verifica
> se a referência de TList não é nil, e somente então efetua a chamada ao
> Destroy.
> 
> Destroy libera a memória usada para armazenar a lista de itens.
> 
> Nota: Destroy não libera a memória apontada pelos elementos da lista.
> 
> Sds,
> 
> Romario
> 
> Eduardo E. J. Menoncello escreveu:
> >
> > Não libera não, aliás, o TList só guarda ponteiros, vc pode guardar qq
> > coisa lá, como uma String ou um numero qualquer.
> >
> > Pra liberar, faça um for liberando um por um...
> >
> > []'s
> >
> > Eduardo
> >
> > -----Mensagem original-----
> > De: delphi-br@yahoogrupos.com.br [mailto:[EMAIL PROTECTED]
> > Em nome de Paulo
> > Enviada em: sexta-feira, 15 de abril de 2005 14:50
> > Para: delphi-br@yahoogrupos.com.br
> > Assunto: [delphi-br] TList
> >
> >
> > Quando crio uma TList com objetos e depois a libero com Free, destruo
> > todos os objetos nela contidos? Como isto acontece?
> 
> --
> <<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>>
> 
> Para ver as mensagens antigas, acesse:
> http://br.groups.yahoo.com/group/delphi-br/messages
> 
> Para falar com o moderador, envie um e-mail para:
> [EMAIL PROTECTED] ou [EMAIL PROTECTED]
> 
> Links do Yahoo! Grupos
> 
> 
> 
> 
>


-- 
<<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>>

Para ver as mensagens antigas, acesse:
 http://br.groups.yahoo.com/group/delphi-br/messages

Para falar com o moderador, envie um e-mail para:
 [EMAIL PROTECTED] ou [EMAIL PROTECTED]
 
Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
    http://br.groups.yahoo.com/group/delphi-br/

<*> Para sair deste grupo, envie um e-mail para:
    [EMAIL PROTECTED]

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
    http://br.yahoo.com/info/utos.html

 



Responder a