Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.136 Beiträge
 
Delphi 12 Athens
 
#19

AW: [Erledigt] Preview Handler in VCL erzeugt MemoryLeak

  Alt 11. Mär 2014, 13:12
Vor dem Aufruf von QueryInterface sollte die Interface-Variable unbedingt leer sein. Wenn nicht, dann vorher manuell auf NIL setzen.
Vorallem innerhalb von Schleifen, oder wenn die Variable vorher für was Anderes verwendet wurde.

QueryInterface, bzw. GetInterface sind mit Out-Parametern deklariert, womit die Eingabe "verworfen" wird, unter Ausschluß der Referenzzählung.
Sowas kann auch bei anderen Funktionen vorkommen, also immer schön aufpassen.

Zitat:
Delphi-Quellcode:
function TInterfacedObject.QueryInterface(const IID: TGUID; out Obj): HResult;
begin
  if GetInterface(IID, Obj) then
    Result := 0
  else
    Result := E_NOINTERFACE;
end;

function TObject.GetInterface(const IID: TGUID; out Obj): Boolean;
begin
  Pointer(Obj) := nil; // <<<<<
  ...
end;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (11. Mär 2014 um 13:16 Uhr)
  Mit Zitat antworten Zitat