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

Материал из Вики проекта PascalABC.NET
Версия от 16:15, 14 января 2010; Mikst (обсуждение | вклад)
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)
Перейти к навигацииПерейти к поиску

Деструкторы отсутствуют. Если на объект больше не ссылается ни одна переменная, то занимаемая им память возвращается автоматически Сборщиком мусора, запускаемым в не зависящий от программиста момент. Если мы хотим выполнить какие-то действия, связанные с объектом в момент сборки мусора, следует переопределить виртуальный метод 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.

Ссылки