mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-07 17:28:14 +02:00
89 lines
1.3 KiB
ObjectPascal
89 lines
1.3 KiB
ObjectPascal
{ %opt=-gh }
|
|
|
|
{$APPTYPE CONSOLE}
|
|
|
|
{$ifdef fpc}
|
|
{$mode delphi}
|
|
{$endif}
|
|
|
|
uses SysUtils;
|
|
|
|
var
|
|
CreatedCount, DestroyedCount: Integer;
|
|
|
|
type
|
|
|
|
{ TCntObject }
|
|
|
|
TCntObject = class(TObject)
|
|
public
|
|
constructor Create; virtual;
|
|
destructor Destroy; override;
|
|
end;
|
|
|
|
{ TMyObject }
|
|
|
|
TMyObject = class(TCntObject)
|
|
private
|
|
FSubObject: TCntObject;
|
|
public
|
|
constructor Create; override;
|
|
destructor Destroy; override;
|
|
procedure AfterConstruction; override;
|
|
end;
|
|
|
|
{ TCntObject }
|
|
|
|
constructor TCntObject.Create;
|
|
begin
|
|
Inc(CreatedCount);
|
|
end;
|
|
|
|
destructor TCntObject.Destroy;
|
|
begin
|
|
Inc(DestroyedCount);
|
|
inherited Destroy;
|
|
end;
|
|
|
|
{ TMyObject }
|
|
|
|
constructor TMyObject.Create;
|
|
begin
|
|
inherited Create;
|
|
FSubObject := TCntObject.Create;
|
|
end;
|
|
|
|
destructor TMyObject.Destroy;
|
|
begin
|
|
FSubObject.Free;
|
|
inherited Destroy;
|
|
end;
|
|
|
|
procedure TMyObject.AfterConstruction;
|
|
begin
|
|
raise Exception.Create('OnAfterConstruction');
|
|
end;
|
|
|
|
var
|
|
A: TMyObject;
|
|
gotexception: boolean;
|
|
begin
|
|
HaltOnNotReleased := true;
|
|
CreatedCount := 0;
|
|
DestroyedCount := 0;
|
|
try
|
|
A := nil;
|
|
try
|
|
A := TMyObject.Create;
|
|
finally
|
|
A.Free;
|
|
end;
|
|
except
|
|
writeln('created objects = ', CreatedCount);
|
|
writeln('destroyed objects = ', DestroyedCount);
|
|
gotexception:=true;
|
|
writeln;
|
|
end;
|
|
if not gotexception then halt(1);
|
|
end.
|