Einzelnen Beitrag anzeigen

EWeiss
(Gast)

n/a Beiträge
 
#28

AW: Warum zerstören sich meine Classen

  Alt 23. Mär 2011, 14:08
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.
Habe auf grund ähnlicher vermutung die Free proceduren auch wieder entfernt.
Denke das Windows das Automatisch übernimmt wenn das Programm geschlossen wird.

gruss
  Mit Zitat antworten Zitat