2008/12/29 Thales (Shubacca) - Tebo Software <tebosoftw...@gmail.com>: > O problema que estou encontrando é que após o dao persistir o objeto, ele > chama o destructor do objeto persistido, mas eu não destrui o mesmo. > > Debugando descobri que o campo que conta as referencias do objeto fica com > valor 0 (zero) após a persistencia, mas ainda existe uma variavel local que > está fazendo referencia ao meu objeto. > > alguém sabe como me ajudar nisso?
Parece que você está misturando ponteiros para objetos e ponteiros para interface. O gerenciamento de memória do Delphi, no que tange interfaces, é feito com contagem de referência: associação conta mais um, alteração do ponteiro ou saída de escopo conta menos um. Mas se você faz com que um ponteiro para objeto aponte para objetos que também tem interfaces apontando, tão logo as interfaces saiam de escopo e o objeto será destruído, deixando aquele ponteiro referenciando uma área de memória inválida. Mais ou menos assim: var VObjI: IObj; // interface VObjO: TObj; // TObj implementa IObj begin VObjO := TObj.Create; VObjI := VObjO; VObjI := nil; VObjO.Free; // erro end; Caso o problema seja este, então ou você não mistura ponteiros para objeto com ponteiros para interface, ou contorna da mesma forma que eu contornei: http://blog.joaomorais.com.br/2008/09/06/objetos-contagem-ref.html Se não for, detalhe melhor a sua implementação. -- Joao Morais