Сборка мусора и отсутствие деструкторов: различия между версиями

Материал из Вики проекта PascalABC.NET
Перейти к навигацииПерейти к поиску
(Новая: == Ссылки == *Особенности языка: продвинутый уровень *[http://pascalabc.net/ru/bazovyie-osobennosti-yazyika-i-bibliotek.html Сайт PascalAB...)
 
Нет описания правки
 
Строка 1: Строка 1:
Деструкторы отсутствуют. Если на объект больше не ссылается ни одна переменная,
то занимаемая им память возвращается автоматически Сборщиком мусора,
запускаемым в не зависящий от программиста момент.
Если мы хотим выполнить какие-то действия, связанные с объектом в момент
сборки мусора, следует переопределить виртуальный метод Object.Finalize
<source lang="Delphi">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.</source>
== Ссылки ==
== Ссылки ==
*[[Особенности языка: продвинутый уровень]]
*[[Особенности языка: продвинутый уровень]]
*[http://pascalabc.net/ru/bazovyie-osobennosti-yazyika-i-bibliotek.html Сайт PascalABC.NET: Особенности языка]
*[http://pascalabc.net/ru/bazovyie-osobennosti-yazyika-i-bibliotek.html Сайт PascalABC.NET: Особенности языка]

Текущая версия от 16:15, 14 января 2010

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

Ссылки