Forum: Object-Pascal / Delphi-Language
Delphi
by shmia,
1. Jul 2005
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)
// Pseudocode
procedure InterfacePointerZuweisung(var oldptr, newptr:Pointer);
begin
if oldptr=newptr then // keine Ahnung, ob Delphi dies beachtet; ich würd's so...
Forum: Object-Pascal / Delphi-Language
Delphi
by shmia,
1. Jul 2005
Ja, das macht Delphi automatisch.
Ich kenne 3 Möglichkeiten dass die Referenzzählung nicht korrekt arbeitet:
1.) speichern von Interfacepointern in "normalen" Pointer.
Man muss mit AddRef nachhelfen, sonst wird das Objekt freigeben
var
ob : Pointer;
lg : ILogger;
begin
lg := CoLogger.Create; // object erzeugen
// RefCount ist 1