Управление памятью
Все ссылочные типы в .NET находятся
под управлением так называемого сборщика мусора.
Это значит, что выделенная вызовом конструктора память никогда не возвращается
явно вызовом деструктора. После того как объект становится не нужным, ему
следует присвоить nil
.
При нехватке динамической памяти выполнение программы приостанавливается, и запускается специальная процедура, называемая сборкой мусора. Она определяет все так называемые достижимые объекты. Если на данный объект более никто не указывает, то он считается недостижимым и будет собран сборщиком мусора. Время вызова сборщика мусора считается неопределенным.
Например, при выполнении участка кода
type Person = class
...
end;
var p: Person := new Person('Иванов',20);
...
p := nil;
память, отведенная под p
,
после присваивания ей nil
станет
недостижимой и будет собрана в непредсказуемый момент.
Отметим, что динамическая память, выделяемая процедурой New, не находится под управлением сборщика мусора, поэтому нуждается в явном освобождении вызовом процедуры Dispose. Именно поэтому работа с обычными указателями считается в PascalABC.NET устаревшей и не рекомендуется к использованию.