Hello,

My question at title seems stupid, but the reason why I've get this doubt
is just because it get different results between Free Pascal and Delphi in
the following example:

=== begin code ===

program project1;

{$IFDEF FPC}
  {$MODE DELPHI}
{$ENDIF}
{$IFDEF MSWINDOWS}
  {$APPTYPE CONSOLE}
{$ENDIF}

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;

procedure TSomeClass.LoadSomething;
begin
  raise Exception.Create('An exception loading something');
end;

constructor TA.Create;
begin
  WriteLn(1);
  inherited Create;
end;

destructor TA.Destroy;
begin
  WriteLn(2);
  inherited Destroy;
end;

procedure TA.AfterConstruction;
begin
  WriteLn(3);
  FSomeObject := TSomeClass.Create;
  FSomeObject.LoadSomething;
end;

procedure TA.BeforeDestruction;
begin
  WriteLn(4);
  FSomeObject.Free;
end;

var
  VA: TA;
begin
  VA := TA.Create;
  try
  finally
    VA.Free;
  end;
end.

=== end code ===

I've compiled it in Free Pascal from trunk (version 3.1.1 [2016/08/26] for
x86_64) installed on a Xubuntu 16.04 64 bits, and got the following log:

$ ./project1
1
3
2
An unhandled exception occurred at $00000000004001CD:
Exception: An exception loading something
  $00000000004001CD  LOADSOMETHING,  line 30 of project1.lpr
  $000000000040045A  AFTERCONSTRUCTION,  line 50 of project1.lpr
  $00000000004002CC  CREATE,  line 38 of project1.lpr
  $00000000004004FA  main,  line 62 of project1.lpr

and I've compiled the same code in an original version of Delphi Pro
(version 10.1 Berlin 24.0.22858.6822), on a Windows 10 64 bits, and I got
the log below and a critical exception (notice the result numbers, they are
different from similar test compiled in Free Pascal):

Win32\Debug>Project1.exe
1
3
4
2
^C

(I need to kill the app by Ctrl+C within terminal)

the critical exception was the known:

[Main Instruction]
Project1.exe has stopped working

[Content]
Windows is checking for a solution to the problem...

So, is it a bug? If so, in which compiler?! Even after reading some
documents about BeforeDestruction I still have doubt about which is the
correct triggering of this method, and I would be glad if someone could
help me to solve it.

--
Silvio Clécio
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Reply via email to