tw30570.pp 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. program project1;
  2. {$IFDEF FPC}
  3. {$MODE DELPHI}
  4. {$ENDIF}
  5. {$IFDEF MSWINDOWS}
  6. {$APPTYPE CONSOLE}
  7. {$ENDIF}
  8. {$r+}
  9. uses SysUtils;
  10. type
  11. TSomeClass = class
  12. public
  13. procedure LoadSomething;
  14. end;
  15. TA = class
  16. private
  17. FSomeObject: TSomeClass;
  18. public
  19. constructor Create; virtual;
  20. destructor Destroy; override;
  21. procedure AfterConstruction; override;
  22. procedure BeforeDestruction; override;
  23. property SomeObject: TSomeClass read FSomeObject;
  24. end;
  25. var
  26. i: longint;
  27. order: array[1..4] of longint;
  28. procedure TSomeClass.LoadSomething;
  29. begin
  30. raise Exception.Create('An exception loading something');
  31. end;
  32. constructor TA.Create;
  33. begin
  34. order[i]:=1;
  35. inc(i);
  36. WriteLn(1);
  37. inherited Create;
  38. end;
  39. destructor TA.Destroy;
  40. begin
  41. order[i]:=2;
  42. inc(i);
  43. WriteLn(2);
  44. inherited Destroy;
  45. end;
  46. procedure TA.AfterConstruction;
  47. begin
  48. order[i]:=3;
  49. inc(i);
  50. WriteLn(3);
  51. FSomeObject := TSomeClass.Create;
  52. FSomeObject.LoadSomething;
  53. end;
  54. procedure TA.BeforeDestruction;
  55. begin
  56. order[i]:=4;
  57. inc(i);
  58. WriteLn(4);
  59. FSomeObject.Free;
  60. end;
  61. var
  62. VA: TA;
  63. ok: boolean;
  64. begin
  65. i:=1;
  66. ok:=false;
  67. try
  68. VA := TA.Create;
  69. except
  70. if order[1]<>1 then
  71. halt(1);
  72. if order[2]<>3 then
  73. halt(2);
  74. if order[3]<>4 then
  75. halt(3);
  76. if order[4]<>2 then
  77. halt(4);
  78. if i<>5 then
  79. halt(5);
  80. if assigned(va) then
  81. halt(6);
  82. ok:=true;
  83. end;
  84. if not ok then
  85. halt(7);
  86. end.