Esse artigo faz parte da revista Clube Delphi Edição 72. Clique aqui para ler todos os artigos desta edição

T-FAMILY: 'Verdana','sans-serif'">Existem resource leaks, que ocorrem quando abrimos uma conexão com um banco de dados, por exemplo, e não a fechamos quando não precisamos mais usá-la. Esses recursos externos à aplicação são chamados no .NET de unmanaged resources.

Embora o Garbage Collector do framework saiba quando recursos não-gerenciados devem ser liberados da memória, ele não tem conhecimento de como fazer isso. Por essa razão, qualquer classe nessa situação deve implementar a interface IDisposable, publicando seu método Dispose e codificando-o para devolver à memória do computador o que estava sendo utilizado.

Mas antes de modificar seus projetos, atente para esse detalhe: no Delphi for .NET, todas as classes implementam implicitamente IDisposable, e redirecionam as chamadas à Dispose automaticamente para o destrutor da classe, Destroy. Isso quer dizer seu código continua o mesmo. Sequer é preciso chamar Dispose, pois Free, no Delphi for .NET, já faz isso por você. Para saber mais sobre esse assunto, confira a seção Links no final do artigo e também a edição 43 da Revista ClubeDelphi.

 

Objeto proprietário (Owner)

O Delphi implementa em todos os seus componentes o conceito de proprietário, ou Owner, que designa um componente responsável por liberar da memória todos os outros definidos como sendo seus. Essa é a primeira coisa que precisamos fazer antes de trabalhar com qualquer componente.

E por ser algo feito logo no início, fazemos por meio do construtor da classe. Veja abaixo a declaração do construtor de TComponent, a classe-base de todos os componentes no Delphi:

 

constructor TComponent.Create(AOwner: TComponent);

 

AOwner é o componente incumbido de liberar o controle sendo criado quando ele, o proprietário, for destruído. Isso é feito quando o destrutor Destroy for chamado. Para saber quais controles pertencem ao componente, basicamente TComponent implementa uma lista interna, que é alimentada a cada nova chamada de Create. E por meio dessa lista, Destroy sabe quem deve ser liberado da memória.

Como Owner tem a responsabilidade de liberar todos que pertencem ao seu “domínio”, quando criamos uma instância de um componente e informamos um proprietário, não devemos nos preocupar em removê-la posteriormente.

Um bom exemplo para ilustrar esse mecanismo já é largamente conhecido do leitor. Sempre que colocamos componentes em um formulário, o Delphi configura o Owner de cada um deles para o formulário em questão, de modo que quando esse for liberado, todos os controles pertencentes a ele também sejam. Não confunda Owner com Parent (veja quadro).

 

...

Quer ler esse conteúdo completo? Tenha acesso completo