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

Responder a