Initialization и finalization

Модуль (Unit) также может содержать блок initialization (инициализация) и блок finalization (финализация).

Эти два фрагмента кода автоматически выполняются при запуске и завершении программы соответственно.

initialization: Запускается при старте программы, когда модуль загружается в память, раньше основного кода программы. Несколько модулей последовательно выполняют свои блоки инициализации в порядке подключения.

finalization: Выполняется непосредственно перед корректным закрытием программы и уничтожением процесса; порядок выполнения обратный порядку инициализации.

Назначение

Initialization: регистрация классов, открытие глобальных файлов / подключений к базам данных, инициализация глобальных переменных, регистрация компонентов;

Finalization: освобождение памяти, закрытие дескрипторов, сохранение настроек, снятие регистрации ресурсов для предотвращения утечек памяти.

Изменим файл модуля PAS из предыдущего урока: MyUnit.pas

unit MyUnit;

{$ifdef FPC}
{$mode objfpc}{$H+}{$J-}
{$endif}

interface

procedure MyProcedure(const A: Integer);
function MyFunction(const S: string): string;

implementation

procedure MyProcedure(const A: Integer);
begin
  WriteLn('A + 10 is: ', A + 10);
end;

function MyFunction(const S: string): string;
begin
  Result := S + 'strings are automatically managed';
end;

// Блок инициализации: запускается автоматически при загрузке модуля
initialization
  WriteLn('Hello world!');

// Блок финализации: запускается автоматически перед корректным завершением программы
finalization
  WriteLn('Goodbye world!');

end.Code language: JavaScript (javascript)

Внизу файла добавлены только эти два блока

Результат выполнения

Последняя строка «Goodbye world» отобразится только после нажатия клавиши Enter (когда программа будет завершаться).

Initialization и finalization

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *