Destruir objeto em tempo de execução

27/02/2003

0

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

Responder

Post mais votado

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.

Nicolas Paulino

Nicolas Paulino
Responder

Mais Posts

27/02/2003

Nildo

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

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


Responder

22/11/2018

Gladstone Matos

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
Responder

07/12/2018

João Filho

Ao invéis de
  seu_objeto.free;


Prefira:
  FreeAndNil(seu_objeto);
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