ユニット(Unit)には initialization(初期化セクション) と finalization(終了処理セクション) を記述することもできます。
この2つのコードブロックは、プログラム起動時と終了時にそれぞれ自動的に実行されます。
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)
ファイル下部に上記2つのセクションを追加しただけです

実行結果

最後の「Goodbye world」はEnterキーを押下した後(プログラムが終了するタイミング)に実行されます。
Initializationとfinalization
Previous: ユニットとプログラムファイルの拡張子一覧
Next: ユニット同士の相互参照