Propriedada Data de TListItem
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???
Se eu destruir o item (TListItem), o ponteiro associado também é destruído ou nao???
Adsilver
Curtidas 0
Respostas
Massuda
06/09/2005
...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).GOSTEI 0
Adsilver
06/09/2005
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
Se eu destruir o ListItem, esse objeto continua existindo na memória?
Que triste, vou precisar destruir muita coisa... rs
GOSTEI 0
José Henrique
06/09/2005
Libere o seu lado Nero!! :D
GOSTEI 0
Massuda
06/09/2005
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).
GOSTEI 0
Elpidio Baberge
06/09/2005
Bom dia.
Estou usando este comando para verificar se tem algum objeto preso na memória:
Estou populando um TListView conforme abaixo:
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?
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?
GOSTEI 0