![]() |
Delphi-Version: 2007
Interfaces - freigabe
Hallo zusammen,
ich habe eine Verständnisfrage zu Interfaces in Delphi, und deren Freigabe dazu folgender kleiner Code ausschnitt
Delphi-Quellcode:
type
IMyInterface = interace .... end; TMyImplementation = class (TInterfacedObject, IMyInterface ) end; implementation function CreateTollesInterface : IMyInterface begin .... result := IMyTollesInterface.Create; end; Verstehe ich das bisher richtig: Jedesmal wenn CreateTollesInterface eine Instanz der Klasse TMyImplementation erstellt, wird der FunktionsPointer von CreateTollesInterface mit in die References geschrieben und somit wird das Interface nie weg geräumt(refCount ist immer 1 weil Funktion global ist)? Ich hoffe mich versteht jemand, falls ja Danke schon mal. ;) |
AW: Interfaces - freigabe
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
Delphi-Quellcode:
heißen.
result := TMyImplementation.Create;
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) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:12 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz