Einzelnen Beitrag anzeigen

shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#7

Re: Interfaces werden nicht dereferenziert

  Alt 1. Jul 2005, 14:53
Zitat von xaromz:
Muss bei *** ein I := nil; stehen oder erkennt Delphi hier die Zuweisung auf eine bereits "gefüllte" Variable und gibt das vorherige Interface frei? Ich vermute mal nein, oder?
Doch, jede Zuweisung an einen Interface-Pointer löst im Hintergrund einen Aufruf an _Release aus.
Es spielt keine Rolle, ob bei der Zuweisung nil oder ein neuer Wert gesetzt wird.
(also braucht du die Zeile mit *** nicht)
Delphi-Quellcode:
// Pseudocode
procedure InterfacePointerZuweisung(var oldptr, newptr:Pointer);
begin
   if oldptr=newptr then // keine Ahnung, ob Delphi dies beachtet; ich würd's so machen
      Exit;

   if oldptr <> nil then
      IUnknown(oldptr)._Release;
   oldptr := newptr;
end;
Andreas
  Mit Zitat antworten Zitat