Einzelnen Beitrag anzeigen

Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.434 Beiträge
 
Delphi 10.4 Sydney
 
#27

AW: Warum zerstören sich meine Classen

  Alt 23. Mär 2011, 08:56
Free in das Interface aufzunehmen oder das Objekt über eine andere Methode des Interface freizugeben ist problematisch. Es existiert zu diesem Zeitpunkt zumindest diese eine Interfacevariable. Danach wird irgendwann der Gültigkeitsbereich für diese Variable verlassen, das übergeordnete Objekt freigegeben, bzw. der Interface-Variable NIL oder ein anderer Wert zugewiesen.
Dabei wird automatisch über das Interface "_Release" des implementierenden Objects aufgerufen.
Delphi-Quellcode:
function TInterfacedPersistent._Release: Integer;
begin
  if FOwnerInterface <> nil then
    Result := FOwnerInterface._Release else
    Result := -1;
end;
Da der versteckt übergebene Parameter Self auf ein nicht mehr existierendes Objekt verweist, kann der implizite Zugriff auf Self.FOwnerInterface zur Zugriffsverletzung führen.
  Mit Zitat antworten Zitat