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 是要在按一下回车后(程序要结束)才会执行的。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注