De onde veio a variável = null como "destruição de objeto"?
Trabalhando em vários sistemas legados escritos em várias versões do .NET, em muitas empresas diferentes, continuo encontrando exemplos do seguinte padrão:
public void FooBar()
{
object foo = null;
object bar = null;
try
{
foo = new object();
bar = new object();
// Code which throws exception.
}
finally
{
// Destroying objects
foo = null;
bar = null;
}
}
Para quem sabe como o gerenciamento de memória funciona no .NET, esse tipo de código é extremamente desnecessário; o coletor de lixo não precisa que você atribua manualmentenull
para dizer que o objeto antigo pode ser coletado, nem atribuirnull
instrui o GC a coletar imediatamente o objeto.
Esse padrão é apenas ruído, dificultando a compreensão do que o código está tentando alcançar.
Por que, então, continuo encontrando esse padrão? Existe uma escola que ensina essa prática? Existe um idioma no qual atribuirnull
são necessários valores para variáveis com escopo local para gerenciar corretamente a memória? Existe algum valor adicional na atribuição explícitanull
que eu não percebi?