Fórum Copiar Objeto, não componente #309081
13/01/2006
0
Alguem pode me dar uma luz de como copiar objeto?
Assign é só pra TComponent certo?
Eu tenho um Objeto que extens TObject.
Se eu faco
A = 1;
B := A;
FreeAndNil(A);
O B se perde.
Parece que ele esta apontando pro mesmo endereco de A, mas nao copiando...
Valeu...
Tiagops
Curtir tópico
+ 0Posts
13/01/2006
Massuda
Para copiar um objeto de uma classe sua derivada de TObject, você precisa prever na sua classe algum construtor de cópia (um construtor que inicializa o objeto sendo contruído com os dados de um objeto passado como parametro) ou algume método de ´clonagem´.
Gostei + 0
13/01/2006
Tiagops
resumindo, teria que copiar atributo por atributo...
é nao era o que eu imaginava, mas da pra fazer tranquilo! Valeu!
Gostei + 0
13/01/2006
Bruno Belchior
Gostei + 0
13/01/2006
Tiagops
mas vou perder meu polimorfismo... :(
Teria que ser algo utilizando reflection...
Gostei + 0
13/01/2006
Massuda
Com relação ao polimorfismo, se eu entendi direito, o problema é que você tem que implementar o método de clonagem (ou o construtor de cópia) na classe base e ir acrescentando mais detalhes nas classes derivadas (isso costuma dar trabalho).
Gostei + 0
13/01/2006
Tiagops
imagina que tenho um ListItem que tem a propriedade Items que possui text e tag por exemplo.
Eu preciso colocar mais dados nos itens do ListItem.
Entao eu coloquei um atributo chamado Object do tipo TObject;
Dai eu criei o meu Value Object. Por exemplo:
Nome : string;
idade : integer;
Dai eu faco
meuObjeto := TmeuObjeto.Create(); meuObjeto.nome := ´aa´; meuObjeto.idade := 2; ListItem.Item.add(); ListItem.Item.items[count-1].object := meuObjeto; FreeAndNil(meuObjeto) // aqui esta o problema da copia :(
e assim vai.
Quando for ler o ListItem eu faco o cast.
Dessa forma, se eu colocar mais atributos no objeto meuObjeto nao precio mexer mais no objeto ListItem.
Mas acho que nao vai dar certo pq tenho que copiar o objeto... :(
[/code]
Gostei + 0
13/01/2006
Massuda
meuObjeto := TmeuObjeto.Create(); meuObjeto.nome := ´aa´; meuObjeto.idade := 2; ListItem.Item.add(); ListItem.Item.items[count-1].object := meuObjeto; FreeAndNil(meuObjeto) // aqui esta o problema da copia :(
Você destrói os objetos associados aos ListItem´s quando não precisar mais dos ListItem´s. Uma alternativa é usar um TObjectList que também recebe os objetos atribuídos aos ListItem´s e destruir esse TObjectList quando não precisar mais dos ListItem´s.
Gostei + 0
13/01/2006
Tiagops
Agora vem a duvida.
Quando eu fechar o formulario aonde esta o TJvImageListBox, ele vai destruir todos os objetos que estao dentro dos itens?
Pelo que sei, o delphi nao destroi os objetos sozinho né? Nao tem um garbageColector. Por isso temos que dar o FreeAndNil né?
Acho que no destructor deste objeto eu teria que fazer um for até Itens.count dando um freeAndNil nos objetos... será?
Gostei + 0
13/01/2006
Massuda
Note que esse problema de não destruir os itens que estão no listbox ocorreria mesmo se você resolvesse a questão da cópia/clonagem dos objetos. Quem iria destruir as cópias/clones dos objetos?
Gostei + 0
13/01/2006
Tiagops
Vou pensar mais um pouco aqui na melhor forma de resolver isso.
Valeu!
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)