Ponteiros
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?
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
Curtidas 0
Respostas
Marco Salles
27/05/2009
São do mesmo tipo
seria Isto ???????
var obj1,obj2:TObject; p:pointer; begin p:=Obj1; Obj1:=Obj2; p:=nil;
seria Isto ???????
GOSTEI 0
Marco Salles
27/05/2009
baseado naquilo que entendi
{ TUmObjecto }
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
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.
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