Thema: Delphi Object.Free

Einzelnen Beitrag anzeigen

Benutzerbild von jim_raynor
jim_raynor

Registriert seit: 17. Okt 2004
Ort: Berlin
1.251 Beiträge
 
Delphi 5 Standard
 
#3

Re: Object.Free

  Alt 14. Dez 2004, 18:48
Zitat von Alter Mann:
Hallo,

abhängig von einem Suchbegriff wird ein Objekt in einer Liste gespeichert.

Delphi-Quellcode:
  if POS('DISK', DStr) <> 0 then Result := TIDEDrive.Create(DeviceID)
  else
  if POS('CDROM', DStr) <> 0 then Result := TCDROMDrive.Create(DeviceID)
  else Result := nil;
Sowohl TIDEDrive als auch TCDROMDrive sind beide von TObject abgeleitet.
Result wird, wie geschrieben in eine Liste vom Typ TList gespeichert;
Beim Freigeben kommt es jedoch zur ZV, da ich nicht weiss hinter welchen
Eintrag sich welches Objekt verbirgt.

Delphi-Quellcode:
destructor TxxxXXXXX.Destroy;
var
  I : Integer;
begin
  for I := FList.Count -1 downto 0 do
  begin
    TObject(FList.Items[I]^).Free;
    FList.Delete(I);
  end;
  FList.Free;
  inherited Destroy;
end;
Auch der is-operator hilft nicht weiter. Muss ich die Zuweisung anders gestallten, so in der Art

Result := Ptr(TIDEDrive.Create(DeviceID)) ???

Bin für jede Antwort dankbar.
Wenn du eine ganz normale TList verwendest (wovon ich jetzt ausgehe) darfst du nicht mit ^ dereferenzieren. Ein Objekt ist nur ein Pointer. Eine derefenzierung wirkt sich daher fatal aus.
Christian Reich
Schaut euch mein X-COM Remake X-Force: Fight For Destiny ( http://www.xforce-online.de ) an.
  Mit Zitat antworten Zitat