Initializationとfinalization

ユニット(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

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です