Нет, это не вызывает утечку памяти. Код, который вы написали, просто отлично. Что нужно помнить о C # (и других языках .NET), так это то, что они собирают мусор .
В отличие от C ++, где вы сами несете полную ответственность за создание и освобождение памяти, в управляемом мире .NET дело обстоит иначе. Все, о чем вам нужно беспокоиться, это создание объекта. Когда на него больше не осталось ссылок на него, он становится пригодным для сбора мусора. Серьезно, я знаю, что это звучит странно, учитывая ваш опыт работы на других языках, но вы действительно должны просто позволить сборщику мусора беспокоиться о таких вещах. «Правильный способ думать о таких ситуациях» - это вовсе не думать о них!
Фактически, только время, которое вам нужно для написания деструктора (и, следовательно, беспокойства об управлении памятью), это если ваш класс использует неуправляемые объекты (такие как дескрипторы окон, объекты GDI + и т. Д.) ) или другие объекты, которые требуют явного закрытия (дескрипторы файлов, соединения с базой данных и т. д.). В мире .NET вы хотите написать деструктор как редко , насколько это возможно, потому что это приводит к небольшому снижению производительности. Специфика заключается в реализации алгоритма сборки мусора, и в какой момент объект может быть собран, но вы не должны пытаться изучить все это.
Важно помнить, что если вам нужно «очистить», когда объект разрушается, вы должны реализовать IDisposable
интерфейс , как и многие классы WinForms (например, * 1020). *Control
) для внутреннего использования неуправляемых объектов.
Вот несколько полезных ресурсов для получения дополнительной информации о модели сборки мусора в .NET: