Допустим, у нас есть код:
class Program
{
public static void Main()
{
Element el1 = new Element();
Element el2 = new Element(){OtherElement = el1};
el1.OtherElement = el2;
}
}
class Element
{
public Element OtherElement {get; set;}
}
Тут нам, чтобы удалить el1 and el2, понадобиться механизм "Mark and Sweep". Но я не знаю, есть он уже в сборщике мусора или нужно ли самому его реализовывать. Почему вообще поднялся этот вопрос? Сборщик мусора работает на основе ссылок: есть ссылка на объект - не трогаем объект, нету - освобождаем память. Но приспособлен ли сборщик мусора к циклическим ссылкам или нужно самому писать механизм "Mark and Sweep"?