Работая над несколькими устаревшими системами, написанными в различных версиях .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
, которое я не получил?