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(程式即將結束)後才會執行。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *