Propriedada Data de TListItem

06/09/2005

0

Queria saber se quando eu associado um ponteiro de um objeto a propriedade DATA de um ListItem (TListView), eu preciso também destrui-lo.
Se eu destruir o item (TListItem), o ponteiro associado também é destruído ou nao???


Adsilver

Adsilver

Responder

Posts

06/09/2005

Massuda

...quando eu associado um ponteiro de um objeto a propriedade DATA de um ListItem (TListView), eu preciso também destrui-lo?
Sim... O TListItem não tem a mínima idéia do que seja o valor que você atribuiu ao elemento Data, por isso ele é declarado como sendo um tipo de dado genérico (Pointer) e não, por exemplo, algo mais específico (por exemplo, TObject).


Responder

07/09/2005

Adsilver

Mas ele nao ficaria como Owner desse objeto nao...

Se eu destruir o ListItem, esse objeto continua existindo na memória?
Que triste, vou precisar destruir muita coisa... rs


Responder

07/09/2005

José Henrique

Libere o seu lado Nero!! :D


Responder

08/09/2005

Massuda

Mas ele nao ficaria como Owner desse objeto...
Só se o objeto que você estiver associando na propriedade Data for um derivado de TComponente criado com o Owner sendo o ListView.

Relendo este tópico, percebi que estou assumindo que o objeto que você está associando ao Data foi criado dinamicamente. Mas pode não ser o caso, poderia ser algum componente que você pôs no form em tempo de projeto. Nesse caso, esse objeto tem um Owner (o form) e você não precisa se preocupar em destruí-lo (fica por conta do form).


Responder

23/05/2019

Elpidio Baberge

Bom dia.

Estou usando este comando para verificar se tem algum objeto preso na memória:
 ReportMemoryLeaksOnShutdown := (DebugHook <> 0); 


Estou populando um TListView conforme abaixo:
  try
    oClienteController := TClienteController.Create;

    oList := oClienteController.Pesquisar(edtPesquisa.Text);

    lstConsulta.Clear;
    for I := 0 to oList.Count -1 do
    begin
      oCliente := TCliente.Create;
      oCliente := oList.Items[i] as TCliente;

      lstViewItem := lstConsulta.Items.Add;
      with lstViewItem do
      begin
        Caption     := IntToStr(oCliente.Id);
        SubItems.Add(oCliente.Nome);
        SubItems.Add(oCliente.CPF);
        SubItems.Add(oCliente.RG);
        SubItems.Add(oCliente.Telefone);
        Data := oCliente;
      end;
    end;

  finally
    oClienteController.Destroy;
    oClienteController := nil;
    oClienteController.Free;

    FreeAndNil(oList);
  end;


até ai blz.

Porém quando fecho a aplicação, recebo a seguinte mensagem:

An unexpected memory leak has occurred. The unexpected small block leaks are:

21 - 28 bytes: TCliente x 5665


Mesmo eu dando um FreeAndNil no meu objeto após atribuir no meu lstViewItem.Data := oCliente, a mensagem acima continua aparecendo.


O que posso fazer para corrigir esse problema?
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar