Einzelnen Beitrag anzeigen

Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.008 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#2

AW: Interfaces - freigabe

  Alt 8. Sep 2011, 17:15
Nein, jedesmal, wenn eine Zuweisung eines Interfaces stattfindet, wird _AddRef aufgerufen und wenn die Variable den Scope verliert, wird _Release aufgerufen. (Technisches Detail: Dafür ist die procedure _IntfCopy aus der System.pas zuständig, deren Aufruf der Compiler an die richtigen Stellen bastelt) Außerdem hast du einen (ich vermute Tippfehler) in deinem Source, es muss result := TMyImplementation.Create; heißen.

Ablauf bei deinem Beispiel (vereinfacht):

- TMyImplementation instanz wird erzeugt
- Instanz wird auf result zugewiesen (QueryInterface wird aufgerufen, um zu schauen, ob TMyImplementation IMyInterface implementiert.
- _AddRef wird aufgerufen -> RefCount = 1
- Rückgabe Ergebnis von CreateTollesInterface wird in einer Variablen gespeichert

Solange diese Variable gültig ist (bei einer lokalen Variable z.B. bis zum Ende der Routine) bleibt der RefCount auf 1 (oder noch erhöht, durch weiteres Zuweisen). Verliert sie den Scope, wird _Release aufgerufen. Sinkt der RefCount wieder auf 0, wird Free aufgerufen. (sofern von TInterfacedObject abgeleitet)
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight

Geändert von Stevie ( 8. Sep 2011 um 17:19 Uhr)
  Mit Zitat antworten Zitat