Fórum Diferença entre Free e FreeAndNil #423681
15/09/2012
0
Poderiam me dizer qual diferença
entre Free e FreeAndnil no Delphi e para qual ocasião eles vão me servir ?
Anderson Mendes
Curtir tópico
+ 0Posts
15/09/2012
Marco Salles
vaja o que diz a VCL a respeito
procedure FreeAndNil(var Obj); var Temp: TObject; begin Temp := TObject(Obj); Pointer(Obj) := nil; /////// Invalida o ponteiro Temp.Free; /// Libera o Objeto . libera recursos da aplicação , desaloca memória etc.... end;
porque tornar o ponteiro do objeto igaul a nil ?
Para não utiliza-lo indevidamente
assim se vc testa ( podemos tb utilizar o Assigned)
if obj = nil then
Opa não posso utilizar o objeto tenho que instancia-lo senão da acesso Violado
Porque que eu disse na teoria ... Porque em muitas situações não adianta dar Freeandnil
Veja o exemplo , imagine dentro de um evento no onclick de um botão
var
objEx:Tedit;
procedure TForm1.Button1Click(Sender: TObject);
var
objIn:Tedit;
begin
if Assigned(ObjEx) then
Showmessage('Ponteiro válido')
else
Showmessage('Ponteiro Inválido');
if Assigned(ObjIn) then
Showmessage('Ponteiro válido')
else
Showmessage('Ponteiro Inválido');
end;
Veja que nesta situação , não adianta fazer FreeanNil(ObjInt) que sempre vai dar um Ponteiro válido
Quer dizer vc ate poderia fazer
var
objEx:Tedit;
procedure TForm1.Button1Click(Sender: TObject);
var
objIn:Tedit;
begin
if Assigned(ObjEx) then
Showmessage('Ponteiro válido')
else
Showmessage('Ponteiro Inválido');
FreeAndNil(ObjEx);
if Assigned(ObjIn) then
Showmessage('Ponteiro válido')
else
Showmessage('Ponteiro Inválido');
//FreeAndNil(ObjIn); ********************Isto nada adianta
ObjIn:=nil;
end;procedure FreeAndNil(var Obj); var Temp: TObject; begin Temp := TObject(Obj); Pointer(Obj) := nil; Temp.Free; end;
Gostei + 0
15/09/2012
Singular Ti
Gostei + 0
15/09/2012
Marco Salles
muito obrigado mesmo
Gostei + 0
16/09/2012
Anderson Mendes
otima explicação, muito bom.
brigado.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)