1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- program project1;
- {$IFDEF FPC}
- {$MODE DELPHI}
- {$ENDIF}
- {$IFDEF MSWINDOWS}
- {$APPTYPE CONSOLE}
- {$ENDIF}
- {$r+}
- uses SysUtils;
- type
- TSomeClass = class
- public
- procedure LoadSomething;
- end;
- TA = class
- private
- FSomeObject: TSomeClass;
- public
- constructor Create; virtual;
- destructor Destroy; override;
- procedure AfterConstruction; override;
- procedure BeforeDestruction; override;
- property SomeObject: TSomeClass read FSomeObject;
- end;
- var
- i: longint;
- order: array[1..4] of longint;
- procedure TSomeClass.LoadSomething;
- begin
- raise Exception.Create('An exception loading something');
- end;
- constructor TA.Create;
- begin
- order[i]:=1;
- inc(i);
- WriteLn(1);
- inherited Create;
- end;
- destructor TA.Destroy;
- begin
- order[i]:=2;
- inc(i);
- WriteLn(2);
- inherited Destroy;
- end;
- procedure TA.AfterConstruction;
- begin
- order[i]:=3;
- inc(i);
- WriteLn(3);
- FSomeObject := TSomeClass.Create;
- FSomeObject.LoadSomething;
- end;
- procedure TA.BeforeDestruction;
- begin
- order[i]:=4;
- inc(i);
- WriteLn(4);
- FSomeObject.Free;
- end;
- var
- VA: TA;
- ok: boolean;
- begin
- i:=1;
- ok:=false;
- try
- VA := TA.Create;
- except
- if order[1]<>1 then
- halt(1);
- if order[2]<>3 then
- halt(2);
- if order[3]<>4 then
- halt(3);
- if order[4]<>2 then
- halt(4);
- if i<>5 then
- halt(5);
- if assigned(va) then
- halt(6);
- ok:=true;
- end;
- if not ok then
- halt(7);
- end.
|