Ponteiros

Delphi

27/05/2009

Estou precisando de uma ajuda com relação à ponteiros no Delphi.
Tenho um objeto chamado [i:a6fda92168]Objeto1[/i:a6fda92168] que suponhamos apontar para o endereço de memória $24AFD8 cujo tipo é [i:a6fda92168]TObject[/i:a6fda92168]. Eu preciso remover a referência que ele está fazendo a memória e passá-la para o [i:a6fda92168]Objeto2[/i:a6fda92168] onde finalmente somente o [i:a6fda92168]Objeto2[/i:a6fda92168] ficaria apontando para lá e o [i:a6fda92168]Objeto1[/i:a6fda92168] deixa de existir.
Como fazer?


Marcosrocha

Marcosrocha

Curtidas 0

Respostas

Marco Salles

Marco Salles

27/05/2009

São do mesmo tipo

var
obj1,obj2:TObject;
p:pointer;
begin
 p:=Obj1;
 Obj1:=Obj2;
 p:=nil;


seria Isto ???????


GOSTEI 0
Marco Salles

Marco Salles

27/05/2009

baseado naquilo que entendi

Type
 TUmObjecto = class
  FNome:String;
  procedure MensagemEstatica();
  Procedure Mensagem();virtual;
end;


procedure TForm1.Button1Click(Sender: TObject);
var
Obj1,Obj2:TUmObjecto;
p:Pointer;
begin
Obj1:=TUmObjecto.Create;
p:=Obj1;
Obj1.FNome:=´Ricardo´;
Obj2:=TUmObjecto.Create;
Obj2.FNome:=´Outro Nome´;
Obj1:=Obj2;
Showmessage(Obj1.FNome);
Showmessage(TUmObjecto(P).FNome);
FreeandNil(TObject(p));
if Obj1=Obj2 then
  Showmessage(´é claro que se trata do mesmo Objeto´)
else
   Showmessage(´não são diferentes´);
If Obj1 = nil Then
 Showmessage(´é nil´)
else
  Showmessage(´é claro que assim como o Obj2 não sera nil´);
FreeandNil(Obj2); //Nesse momento Obj1 Tb é destruido
Showmessage(Obj1.FNome);
Obj1.MensagemEstatica;
Obj1. Mensagem;  //dara erro de acesso Violado Aqui Método Virtual
Obj1.Free;
Obj1:=Nil;
end;


{ TUmObjecto }

procedure TUmObjecto.Mensagem;
begin
showmessage(´xiiii deu pau´);
end;


procedure TUmObjecto.MensagemEstatica;
begin
showmessage(´Ola mensagm estatica´)
end;



GOSTEI 0
Marcosrocha

Marcosrocha

27/05/2009

Olá Marco, obrigado pela resposta.
Andei pesquisando pela internet e utilizam bastante o nome de ´clonar´ objetos. Neste caso é o código que você me passou sim, o que eu preciso é mover o conteudo de uma variavel [i:4047787687]TObject[/i:4047787687] para outra, como se eu trocasse apenas o ponteiro que aponta para o endereço de memória X.
Obrigado por sua ajuda.


GOSTEI 0
POSTAR