Деструктор. «Сборка мусора»
Содержание
- 1. Что в языке C# означает «сборка мусора»?
- 2. Каким образом система «сборки мусора» определяет: используется ли объект или нет?
- 3. Как часто происходит «сборка мусора» в системе динамического управления памятью C#?
- 4. Для чего предназначены деструкторы?
- 5. Когда вызывается деструктор? Пример объявления деструктора в классе
- Связанные темы
Поиск на других ресурсах:
1. Что в языке C# означает «сборка мусора»?
Во время работы программы, когда создаются объекты класса, происходит выделение оперативной памяти оператором new. После того, как объект выполнил свою работу, он (возможно) уже не используется в программе (но память все еще занимает). Если в программе создано много объектов классов, то может возникнуть ситуация когда выделенной памяти не хватит для создания следующего объекта.
В этом случае, важно освободить память что была выделена под объекты, которые уже не используются. Для этого система динамического распределения памяти C# использует так называемую «сборку мусора». Если происходит «сборка мусора» то освобождается память для объектов, которые не используются.
⇑
2. Каким образом система «сборки мусора» определяет: используется ли объект или нет?
Чтобы определить, используется объект или нет, система «сборки мусора» просматривает ссылки на этот объект на данный момент. Если ссылки отсутствуют, то этот объект считается ненужным и можно выполнять освобождение памяти для него. В дальнейшем эта освобожденная память может быть использована для распределения других объектов.
⇑
3. Как часто происходит «сборка мусора» в системе динамического управления памятью C#?
Если использованный объект становится ненужным, то выделенная для него память может быть освобождена не сразу, а позднее. В системе динамического управления памятью C# «сборка мусора» происходит только время от времени во время выполнения программы. «Сборка мусора» может не происходить если есть небольшое количество неиспользуемых объектов.
⇑
4. Для чего предназначены деструкторы?
Бывают случаи в программе, когда перед освобождением памяти, выделенной под объект нужно выполнить какие то действия. Деструктор, это метод который вызывается для гарантированного освобождения памяти под объект. В деструкторе указываются те действия, которые необходимо выполнить прежде чем уничтожить объект.
Общая форма деструктора имеет вид:
~имя_класса()
{
// код деструктора
}
где имя_класса – имя конкретного класса.
У деструктора отсутствует тип, который возвращается и список параметров.
⇑
5. Когда вызывается деструктор? Пример объявления деструктора в классе
В C# явно вызвать деструктор не получится, потому что на это нет специального оператора. Например, в языке C++ для этих целей используется оператор delete, который в языке C# не используется. Но в C++ не реализована система «сборки мусора».
Однако, деструктор автоматически вызывается системой «сборки мусора» перед уничтожением памяти под объект его класса.
Пример. В примере объявляется класс MyClass, в котором реализован деструктор ~MyClass().
// пример класса, в котором реализован деструктор class MyClass { int[] A; // внутренний массив A // конструктор класса public MyClass() { // выделение памяти для массива A A = new int[100]; } // деструктор класса ~MyClass() { // действия, которые необходимо выполнить, если произойдет "сборка мусора", // и может быть вызван деструктор // ... } }
⇑
Связанные темы
- Инициализация данных в классе. Конструктор класса. Конструктор по умолчанию
- Динамическое выделение памяти. Оператор new. Выделение памяти для типов-значений, структур, перечислений, объектов классов. Выделение памяти для массивов