Сборка мусора и отсутствие деструкторов

Материал из Вики проекта PascalABC.NET
Перейти к навигацииПерейти к поиску
Версия для печати больше не поддерживается и может содержать ошибки обработки. Обновите закладки браузера и используйте вместо этого функцию печати браузера по умолчанию.

Деструкторы отсутствуют. Если на объект больше не ссылается ни одна переменная, то занимаемая им память возвращается автоматически Сборщиком мусора, запускаемым в не зависящий от программиста момент. Если мы хотим выполнить какие-то действия, связанные с объектом в момент сборки мусора, следует переопределить виртуальный метод Object.Finalize

type 
  Person = class
  private
    name: string;
    age: integer;
  public
    constructor (n: string; a: integer);
    begin
      name := n; age := a;
    end;
    procedure Print;
    begin
      writeln('Имя: ',name,'  Возраст: ',age);
    end;
    procedure Finalize; override;
    begin
      writeln('Вызывается сборщиком мусора в момент, не зависящий от программиста');
    end;
  end;

var p,p1: Person;

begin
  p := new Person('Иванов',20); // Новый синтаксис вызова конструктора (рекомендуется)
  p.Print;
  p1 := Person.Create('Попов',19); // Старый синтаксис вызова конструктора (не рекомендуется)
  p1.Print;
end.

Ссылки