Destruir objeto em tempo de execução
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.
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
Curtidas 2
Melhor post
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.
* 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
27/02/2003
dbedit1.free;
dbedit2.free;
....
O .FREE, além de destruie ainda libera da memória.
dbedit2.free;
....
O .FREE, além de destruie ainda libera da memória.
GOSTEI 1
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.
* 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
27/02/2003
Ao invéis de
Prefira:
seu_objeto.free;
Prefira:
FreeAndNil(seu_objeto);
GOSTEI 0