Работая на нескольких унаследованных системах, написанных в различных версиях .NET, во многих разных компаниях, я нахожу примеры следующего шаблона:
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;
}
}
Любому, кто знает, как работает управление памятью.NET, этот вид кода крайне не нужен;сборщику мусора не требуется, чтобы вы вручную назначали null
, чтобы сообщить, что старый объект может быть собран, а также назначение null
не инструктирует GC немедленно собрать объект.
Этот шаблон - просто шум, усложняющий понимание того, чего пытается достичь код.
Почему же я продолжаю искать этот шаблон?Есть ли школа, которая учит этой практике?Существует ли язык, на котором для правильного управления памятью требуется присвоение значений null
локальным переменным?Есть ли какое-то дополнительное значение в явном присвоении null
, которое я не воспринял?