[DICA] Automatizando a destruição de objetos criados

27/03/2018

0

Olá pessoal, blz!?

Gostaria de compartilhar uma coisa que ando fazendo que de certa forma "automatiza" a destruição de objetos criados em um formulário.
Vai durar toda vida útil de um formulário, como uma conexão com o banco criada em tempo de execução.

[Dica 01] Se for passado no Create da conexão como parâmetro AOwner , passa-se a responsabilidade da destruição daquela conexão ao formulário. Exemplo:

var
    conBD : TFDConnection;
begin
    conBD := TFDConnection.Create(Self); // Esse objeto será destruído quando o Self for.
end;


Obs.¹: O Owner pode ser qualquer objeto.

[Dica 02] Existem classes que criamos onde os objetos de dentro vivem mudando de valor, por exemplo, um Objeto "TCliente" pertencente a uma classe "TVenda". Quando há uma substituição de cliente nessa venda é necessário que se destrua a instância que está na memória (caso ela exista) para modificar o cliente ou vendedor atribuído aquela venda por exemplo, o que tornaria o código redundante, já que muitas vezes é difícil lembrar de destruir sempre que vai atribuir algo novo a mesma variável.
A solução que apliquei foi a mascará a variável através uma property para interceptar, através do método Set, a atribuição de qualquer novo valor, limpando o valor antigo da memória para que o novo seja inserido sem problemas:

TVenda = class
private
    FCliente: TCliente;
    procedure SetCliente(Value: TCliente);
published
    property Cliente: TCliente read FCliente write SetCliente;
end;

implamentation

uses
    SysUtils;

procedure TVenda.SetCliente(Value: TCliente);
begin
    if Assigned(FCliente) then
        FreeAndNil(FCliente);
    FCliente := Value;
end;

// Desse modo não precisamos lembrar de limpar o ponteiro da memória sempre que formos atribuir um novo valor a "Cliente" de "Venda".


Espero que tenha ficado claro.
Obs.²: é possível que tenha errado algo na sintaxe porque escrevi aqui direto no navegador. kkkk, então me perdoem se for o caso.
Obs.³: É possível combinar as duas abordagens também rs

Valeu, abraço!
Essa dica foi gerada a partir de um comentário na aula [url:descricao=Memory Leak com lista de objetos - Delphi Memory Leak: Criando e destruindo objetos - Vídeo 5]//www.devmedia.com.br/memory-leak-com-lista-de-objetos-delphi-memory-leak-criando-e-destruindo-objetos-video-5/38590[/url]
Lucas Guimarães

Lucas Guimarães

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