2009/7/6 marciosulfabril <mar...@sulfabril.com.br>: > Pessoal estou utilizando a extrutura a abaixo , class com varios records, > e nao sei como fazer para limpar a memoria corretamente apos utilizar. > > Record precisa limpar a memoria?
Não. Record é uma estrutura estática que o compilador aloca e o compilador desaloca. Você só precisa desalocar memória que você aloca manualmente, com exceção de strings e arrays dinâmicos, cuja limpeza também é feita pelo compilador. Detalhes abaixo. > > Tnota = class(TObject) > public > codEmpresa : String; > emitente : Tipo_dados_emitente; > destinatario : Tipo_dados_destinatario; > Produto : array of Tipo_dados_produto ; > end; > > Tipo_dados_produto = record > nItem : String; > infAdProd: String; > cProd : String; > cEAN : String; > ICMS : Tipo_ICMS; > PIS : Tipo_dados_ProdutoPISaliquota; > end ; > > Tipo_ICMS = record > CST00: Tipo_dados_CST00 ; > CST10: Tipo_dados_CST10 ; > CST20: Tipo_dados_CST20 ; > CST30: Tipo_dados_CST30 ; > CST40: Tipo_dados_CST40 ; > CST51: Tipo_dados_CST51 ; > CST60: Tipo_dados_CST60 ; > CST70: Tipo_dados_CST70 ; > CST90: Tipo_dados_CST90 ; > end; > > > Tipo_dados_CST20 = Record > Orig : String; > CST : String; > modBC : String; > pRedBC : String; > vBC : String; > pICMS : String; > vICMS : String; > end; > > //........................... > > > Para utilizar u faco desta maneira > > var > nota : Tnota; > > begin > > nota := nil; Você não precisa disso acima, e o compilador certamente emite um hint nesse código. > nota:= Tnota.Create; > > nota.codEmpresa := vetorLinha[1]; > ... > ... > inc(contprod); > SetLength(nota.Produto,contprod); Array dinâmico acima. Os itens desse array será removido pelo compilador assim que ele sair de contexto. Agora atenção, se algum item desse array apontar para algum objeto, você tem que remover o objeto manualmente. Se apontar para uma string ou outro array dinâmico, você não precisa se preocupar. > nota.Produto[contprod-1].nItem := vetorLinha[1] ; > nota.Produto[contprod-1].infAdProd := vetorLinha[2] ; > CONTINUE;; > .. > ... > e para limpar faco assim > nota.free; > nota:= nil; FreeAndNil(nota) é mais seguro que as duas linhas acima. > > Esta correto desta maneira ??? > esvazia toda a memororia ?? Use FastMM, ele é seu amigo. Joao Morais