Destruir objeto em tempo de execução

Delphi

27/02/2003

Boa Tarde. Estou utilizando um programa com objetos criados em tempo de execução. Exemplo:

DBEdit1:=TDBEdit.create(self);
DBEDIT1.Parent:=Self;

Isso no onshow de um form.

Mas se eu entrar nesse form de novo ele irá criar novamente os objetos.

Assim, como faço para destruir esses objetos no onclose do form.

Valew.


Doug_chagas

Doug_chagas

Curtidas 2

Melhor post

Nicolas Paulino

Nicolas Paulino

22/11/2018

Destroy, Free e FreeAndNil em Delphi.

* Destroy: Executa o destrutor da classe, liberando-o da memória, porém não remove a referência do objeto da memória, ou seja, se você executar o “destroy” de um objeto e em seguida consultar se ele está instanciado, a consulta retornará que o objeto ainda existe, e isto poderá causar problemas na sua aplicação.

* Free: Também destrói o objeto, porém antes de chamar o destrutor da classe, o método Free verifica se o objeto não é nil, ou seja, o Free pode prevenir um erro na aplicação e de certa forma é mais seguro do que o Destroy, porém ele também não limpa a referência da memória e resulta no mesmo problema encontrado no Destroy.

* FreeAndNil: É o método mais seguro de ser utilizado, pois ele executa o Free e também atribui nil para o endereço de memória, seria como executar objProduto.Destroy e em seguida objProduto:= nil. Então ao executar o FreeAndNil e depois testar se o objeto está instanciado, o resultado será que o objeto não está instanciado, o que é o correto.
GOSTEI 3

Mais Respostas

Nildo

Nildo

27/02/2003

dbedit1.free;
dbedit2.free;
....

O .FREE, além de destruie ainda libera da memória.


GOSTEI 1
Gladstone Matos

Gladstone Matos

27/02/2003

Destroy, Free e FreeAndNil em Delphi.

* Destroy: Executa o destrutor da classe, liberando-o da memória, porém não remove a referência do objeto da memória, ou seja, se você executar o “destroy” de um objeto e em seguida consultar se ele está instanciado, a consulta retornará que o objeto ainda existe, e isto poderá causar problemas na sua aplicação.

* Free: Também destrói o objeto, porém antes de chamar o destrutor da classe, o método Free verifica se o objeto não é nil, ou seja, o Free pode prevenir um erro na aplicação e de certa forma é mais seguro do que o Destroy, porém ele também não limpa a referência da memória e resulta no mesmo problema encontrado no Destroy.

* FreeAndNil: É o método mais seguro de ser utilizado, pois ele executa o Free e também atribui nil para o endereço de memória, seria como executar objProduto.Destroy e em seguida objProduto:= nil. Então ao executar o FreeAndNil e depois testar se o objeto está instanciado, o resultado será que o objeto não está instanciado, o que é o correto.


show de bola! Eu faco assim:

objeto.destroy;
objeto := nil;


abracos
GOSTEI 0
João Filho

João Filho

27/02/2003

Ao invéis de
  seu_objeto.free;


Prefira:
  FreeAndNil(seu_objeto);
GOSTEI 0
POSTAR