Destruir objeto em tempo de execução
27/02/2003
0
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
Post mais votado
22/11/2018
* 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
Mais Posts
27/02/2003
Nildo
dbedit2.free;
....
O .FREE, além de destruie ainda libera da memória.
22/11/2018
Gladstone Matos
* 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
07/12/2018
João Filho
seu_objeto.free;
Prefira:
FreeAndNil(seu_objeto);
Clique aqui para fazer login e interagir na Comunidade :)