Я знаю, что когда объект не имеет ссылок, сборщик мусора освобождает память. Но у меня есть сомнения.Сбор мусора экземпляров с круговой ссылкой
У меня есть класс, который представлен в виде дерева:
class MyNode
{
string Name;
List<MyNode> Descendants;
MyNode Parent;
}
Когда я создать узел, который имеет потомков, у меня есть ссылка на узел, а также сын имеет ссылку на узел в Материнская собственность. Кроме того, узел имеет ссылку на потомка в списке потомков.
Так что пример.
Node myNode = new Node();
Node myDescendant = new Node();
myNode.Descendants.Add(myDescendant);
myDescendant.Parent = myNode;
можно удалить ссылку на myNode
настройку его null
. Однако объект по-прежнему ссылается, потому что myDescendant
ссылается на него в свойстве Parent
. Объект myDescendant
не вспоминается, поскольку он упоминается в списке потомков объекта-узла.
Похоже, что существует цикл, который избегает запоминания узла. Это правда? Возможно, мне нужно установить null
все свойства в узле и потомках и очистить список потомков?
Большое спасибо.
_ "У меня есть класс, который является ... struct" _ является противоречивым, а затем вы не учитываете 'class' | ключевое слово 'struct', которое могло бы прояснить его. Также вы смешиваете 'Node' и' MyNode'. –
* У меня есть класс, который является структурой дерева: * Umm what? Шутки в сторону? Структуру или класс? –
@HenkHolterman Если бы это была 'struct' в смысле C#, то он не мог установить его в' null'. Это, безусловно, «класс». Тип представляет древовидную структуру, используя более общее определение «структура», а не определение ключевого слова C#. I.e., это класс, который представляет структуру данных дерева. – Servy