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;