Einzelnen Beitrag anzeigen

DasWolf

Registriert seit: 7. Jun 2016
75 Beiträge
 
Delphi 10.1 Berlin Professional
 
#35

AW: Zugriffsverletzung beim Zerstören der TIniFile-Instanz

  Alt 29. Jan 2021, 09:08
Free prüft selbst ob die Variable bereits nil ist, dann passiert nichts.
TObject(nil).Free; // läuft problemlos
Das ist falsch. Korrigiert mich bitte, wenn es nach Version Delphi 10.1 anders sein sollte.
Läuft auch unter 10.1 problemlos!
Delphi-Quellcode:
program Project769;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils;

begin
  try
    TObject(nil).Free;
    Writeln('Geht doch');
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
  Readln;
end.
"dann passiert nichts" ist definitiv falsch. Wer macht denn bitteschön TObject(nil).Free; ?

Delphi-Quellcode:
var
  fObject: TMyObj;
begin
  fObject := TMyObj.Create;
  try
    fObject.Trallalla;
  finally
    fObject.Free;
  end;

  fObject.Free; //was passiert hier?
end;
Ein Unterschied wäre das hier:
Delphi-Quellcode:
var
  fObject: TMyObj;
begin
  fObject := TMyObj.Create;
  try
    fObject.Trallalla;
  finally
    fObject.Free;
    fObject := nil; //Ein kleiner, aber feiner Unterschied
  end;

  fObject.Free; //dann passiert nichts.
end;
  Mit Zitat antworten Zitat