Guionardo Furlan wrote: > TReg = record > private > FInicializado: Boolean; > FData: array of string; > function GetCount: Integer; > function SetCount(const Value: Integer); > public > property Count: Integer read GetCount write SetCount; > property Data[Index: Integer] read GetData write SetData; > end; > <snip> > 1. Quando eu defino uma variável com o tipo TReg, o campo FInicializado > Booleano é *sempre* criado como False?
Ao instanciar uma classe, sim. Record eu me arrisco a dizer que não, uma vez que ele não tem uma rotina de inicialização como uma classe. Se a variável desse record for global, possivelmente ele será inicializado. Se for dentro de uma procedure, function ou method, mais provável que não. > 2. Após vários processos em que o tamanho da array de strings FData é > modificado, pode ocorrer vazamento de memória? Não. Array dinâmico possui contagem de referência e ele é destruído tão logo saia de escopo, assim como acontece com ansi strings. > Num sistema, criei um record similar a este, e depois disso, começaram a > aparecer mensagens do FastMM falando sobre vazamento de memória com tipos > string, que não estou conseguindo identificar. Você cria alguma coisa dinamicamente, tal como instância de classes ou através da procedure new? Talvez a string esteja em um array, e este array esteja associado a alguma outra área de memória, tal como um objeto ou uma variável dinâmica? > No NG, recebi dicas para utilizar classes ao invés de records, mas foi o que > me pareceu mais econômico, já que as variáveis record serão acessadas > localmente, dentro de outras classes. A única economia ao utilizar record é não precisar instanciar, e seus métodos receberem um parâmetro a menos (que no caso da classe é o ponteiro da instância) mas será que realmente vale a economia? Joao Morais