...
Note |
---|
A falta da chamada ao método FREE resulta no objeto ainda em memória depois da utilização do script e isso pode gerar problemas quanto ao uso de memória pelo software e vazamentos de memória, que podem atrapalhar o uso do software como um todo. |
Abaixo um exemplo de uma maneira de codificação errada e que acarretará muitos problemas ao software.
Code Block | ||
---|---|---|
| ||
uses
Classes; // unit que tem a definição da classe TStringList
var
str : TStringList; //declaração da variável
begin
str := TStringList.Create; // criação do objeto
str.add('Testando'); //utilização do objeto
str.add(' ciclo de vida');
str.add(' de objetos no script.');
ShowMessage(str.Text);
str.free; //destruição/eliminação do objeto
end; |
Note |
---|
Ao não utilizar a estrutura do TRY e qualquer erro ocorrer entre as linhas 7 e 11, o objeto não será destruído da memória. |
Na situação acima, poderão ocorrer duas coisas após acontecer algum erro e a memória não ser liberada:
Ao executar novamente esse código, novos erros irão surgir, como por exemplo, o erro que menciona que o objeto str já está assinado e já existe na memória e que não pode ser criado novamente.
Outra situação com base no exemplo acima, em um método local e não global (acima é global) alocar mais memória a cada vez que gera um erro, e isso vai empilhando mais memória para o mesmo objeto, até que o sistema/software gere novos erros de Out of Memory ou Stack Overflow.
Para facilitar ainda mais o entendimento, foi produzido um vídeo sobre este conteúdo. Para acessá-lo, utilize o link abaixo:
...