жизненный цикл объекта в списке <T>.add (T _element) в C # - PullRequest
0 голосов
/ 04 ноября 2011

Я знаю, что функция add на самом деле добавляет только ссылку на объект _element.Мой вопрос: если мой список является глобальным, я использую функцию add в функции, поэтому _element также является локальным.Правда ли, что даже после того, как я выйду из этой функции, объявленный _элемент все еще находится в куче, пока не произойдет, когда глобальный список будет мертв?

Спасибо.

Ответы [ 3 ]

0 голосов
/ 04 ноября 2011

Это частично правда.Элемент будет оставаться в куче до тех пор, пока его ссылки (кроме слабых ссылок) на него.Если список «мертв», как вы его указали или элемент удален.Элемент будет удален из кучи, но не сразу.

Даже когда больше нет ссылок, ссылающихся на элемент, нам все равно придется ждать, пока сборщик мусора не очистит его.Существует вероятность того, что элемент переместился в более высокое поколение в сборщике мусора, и поэтому даже сборка мусора первого уровня не удалит элемент из кучи.

Сборка мусора (в .NET) - тяжелый материал, советую прочитать http://msdn.microsoft.com/en-us/magazine/bb985010.aspx для получения дополнительной информации

0 голосов
/ 04 ноября 2011

Да, все объекты, содержащиеся в этом списке, хранящиеся в них данные не будут возвращены GC. Если вы хотите, чтобы GC собирал объекты в статической или долгоживущей коллекции, вам может быть интересно взглянуть на WeakReference .

0 голосов
/ 04 ноября 2011

Да, объект , на который указывает ссылка, теперь останется в живых.В более общем смысле объекты почти всегда переживают код, который их создает, поскольку обычный GC является недетерминированным .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...