public class TestList :IEnumerable
{
private List<TestListElement> elementsList;
public TestList()
{
elementsList = new List<TestListElement>();
}
IEnumerator IEnumerable.GetEnumerator()
{
return elementsList.GetEnumerator();
}
}
Есть ли смысл создавать у него деструктор следующего вида:
~TestList()
{
elementsList.Clear();
}
Варианты ответа: "Да, нужно же помочь сборщику мусора", "Без разницы", "Нет, т.к. бессмысленная пустая работа", "Ни в коем случае, т.к. это может привести к модификации коллекции при перечислении."
Здравствуйте, v0rdych, Вы писали:
V>Варианты ответа: "Да, нужно же помочь сборщику мусора", "Без разницы", "Нет, т.к. бессмысленная пустая работа", "Ни в коем случае, т.к. это может привести к модификации коллекции при перечислении."
Не стоит, используте деструктор для освобождение unmanaged-ресурсов, с остальным прекрасно справляется сборщик мусора.
Здравствуйте, v0rdych, Вы писали: V>Варианты ответа: "Да, нужно же помочь сборщику мусора", "Без разницы", "Нет, т.к. бессмысленная пустая работа", "Ни в коем случае, т.к. это может привести к модификации коллекции при перечислении."
Здравствуйте, v0rdych, Вы писали:
V>Варианты ответа: "Да, нужно же помочь сборщику мусора", "Без разницы", "Нет, т.к. бессмысленная пустая работа", "Ни в коем случае, т.к. это может привести к модификации коллекции при перечислении."
Последний ответ тоже справедлив.
Здравствуйте, QrystaL, Вы писали:
S>>Последний ответ тоже справедлив.
QL>Ну если финализатор вызвался, то уже никакой работы с объектом не получится, какая тут енумерация? )
Если попросить перечислитель списка при жизни объекта, а потом бросить ссылки на объект, то объект соберется GC, а сам список останется до тех пор пока не собран перечислитель. Так что ничто не мешает перечислять элементы списка, чей owner уже собран сборщиком. Вот в таком случае очистка списка при финализации объекта повлечет исключение при дальнейшем использовании перечислителя.
Здравствуйте, Lloyd, Вы писали:
V>>Варианты ответа: "Да, нужно же помочь сборщику мусора", "Без разницы", "Нет, т.к. бессмысленная пустая работа", "Ни в коем случае, т.к. это может привести к модификации коллекции при перечислении." L>Не стоит, используте деструктор для освобождение unmanaged-ресурсов, с остальным прекрасно справляется сборщик мусора.
Более того, в общем случае нельзя в финализаторе обращаться к ссылочным полям, т.к. для них уже может быть вызван финализатор и они могут находиться в невлидном состоянии.