program raiiexample;
{$mode objfpc}{$H+}
uses
SysUtils;
type
TAutoTimer = class
private
FStart: QWord;
public
constructor Create;
destructor Destroy; override;
end;
constructor TAutoTimer.Create;
begin
FStart := GetTickCount64;
WriteLn('Timer started');
end;
destructor TAutoTimer.Destroy;
begin
WriteLn('Elapsed: ', GetTickCount64 - FStart, ' ms');
inherited Destroy;
end;
begin
// ブロックを抜けると自動で Destroy が呼ばれる
with TAutoTimer.Create do
try
Sleep(500);
finally
Free;
end;
end.