GARANTIR DESCONTO

Fórum Diferença entre Free e FreeAndNil #423681

15/09/2012

0

Opa Galera,

Poderiam me dizer qual diferença

entre Free e FreeAndnil no Delphi e para qual ocasião eles vão me servir ?
Anderson Mendes

Anderson Mendes

Responder

Posts

15/09/2012

Marco Salles

na teoria o freeandnil alem de liberar o objeto ele invalida o ponteiro ou o torna nil

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;
Responder

Gostei + 0

15/09/2012

Singular Ti

Isso ae Marco... Otima explicação!!!
Responder

Gostei + 0

15/09/2012

Marco Salles

opa , um elegio é sempre um elógio. Porém um elógio de uma pessoa com o seu aporte valem dez elógios...
muito obrigado mesmo
Responder

Gostei + 0

16/09/2012

Anderson Mendes

Valeu mesmo pela resposta,

otima explicação, muito bom.

brigado.
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar