domingo, 23 de agosto de 2026

Explicação sobre os "Donos de Objetos" em sua Criação

Tutorial rápido — Create(Owner) em Object Pascal

Em Object Pascal, muitos componentes, incluindo formulários, são criados utilizando o padrão:

```
Objeto := TClasse.Create(Owner);

O parâmetro Owner define o proprietário do componente. Uma das principais responsabilidades do Owner é controlar a destruição automática do objeto.

```

1. Create(Application)

Form2 := TForm2.Create(Application);

Nesse caso:

  • O Owner do formulário é Application.
  • A aplicação será responsável pela sua destruição.
  • O formulário também pode ser destruído antecipadamente usando Free.
Uso comum: formulários que permanecem vinculados ao ciclo de vida da aplicação.

2. Create(Self)

Form2 := TForm2.Create(Self);
Atenção: Self não significa simplesmente "ele mesmo". Em Object Pascal, Self representa a instância atual do objeto.

Por exemplo:

procedure TForm1.Abrir;
begin
  Form2 := TForm2.Create(Self);
end;

Nesse exemplo:

  • Self representa Form1.
  • Portanto, o Owner de Form2 será Form1.
  • Quando Form1 for destruído, Form2 também será destruído automaticamente.

3. Create(nil)

Form2 := TForm2.Create(nil);

Quando o parâmetro é nil, o formulário é criado sem Owner.

  • Nenhum outro objeto será responsável pela sua destruição.
  • O formulário não será destruído automaticamente por um Owner.
  • O código que criou o formulário deve cuidar de sua destruição.

Um padrão comum para um formulário modal é:

Form2 := TForm2.Create(nil);
try
  Form2.ShowModal;
finally
  Form2.Free;
end;
Importante: Create(nil) não significa "na prática, Application". Se o Owner é nil, o objeto realmente não possui proprietário.

4. Application.CreateForm

Application.CreateForm(TForm2, Form2);

CreateForm é um método de TApplication usado para criar formulários.

Conceitualmente, o resultado é semelhante a criar o formulário passando Application como Owner:

Form2 := TForm2.Create(Application);

Portanto, nesse caso, o formulário fica associado ao ciclo de vida da aplicação.

Regra prática

Criação Owner Responsável pela destruição
Create(Application) Application Application
Create(Self) Objeto representado por Self Objeto representado por Self
Create(nil) Nenhum Seu código

Owner não é Parent

Um conceito importante é não confundir Owner com Parent.

Owner

Está relacionado ao gerenciamento do ciclo de vida e destruição dos componentes.

Parent

Está relacionado à hierarquia visual dos controles.

Por exemplo:

Button1.Parent := Panel1;

Nesse caso, Panel1 passa a ser o Parent visual do botão. Isso não significa que Panel1 tenha se tornado automaticamente o Owner do botão.

Resumo

```
  • Owner controla quem será responsável pela destruição automática do componente.
  • Self representa a instância atual do objeto.
  • nil significa que o objeto não possui Owner.
  • Create(nil) não transforma o Owner em Application.
  • Owner e Parent são conceitos diferentes.

A escolha do Owner deve levar em consideração quem deverá controlar o ciclo de vida do objeto criado.

```

Abraços

Terence

Nenhum comentário:

Postar um comentário