![]() |
Interfaces RefCount erhöht bei jedem Zugriff?
Hallo,
hab mal ne Verständnisfrage zu Interfaces: Ist es normal, das der RefCount bei jedem Zugriff auf ein ein Interface implementierendes Objekt erhöht wird? Ich habe folgende Klassen:
Delphi-Quellcode:
Jedesmal, wenn ich b.GetFoo aufrufe, wird FFoo.RefCount erhöht.
IFoo=interface(ICommon)
[GUID]; IBar=interface(ICommon) [GUID]; TFoo=class(TInterfacedObject, IFoo) .... end; TBar=class(TInterfacedObject, IBar) FFoo: TFoo; ... function GetFoo: IFoo; ... end; var b: IBar; Ist das korrekt so oder mach ich was falsch? |
AW: Interfaces RefCount erhöht bei jedem Zugriff?
Ja, wenn man es falsch behandetl, dann ist es normal.
Wenn du das Interface nutzt, dann behandelt es besser immer als Interface.
Delphi-Quellcode:
Object > Interface = ein Interface wird erstellt und somit wird der Zähler erhöht
TBar=class(TInterfacedObject, IBar)
FFoo: IFoo; <<<<<<< ... function GetFoo: IFoo; ... end; Beim Freigeben der Interfacevariable sollte der Zähler zwar wieder erniedrigt werden, aber mit etwas Pech wird dann das Objekt auch gelöscht, sobald der Zähler 0 wird. Abgesehn davon gibt es einen Compilerfhler, welcher bei der Referenzzählung (über den Rückgabewert einer Funktion) durchdreht. |
AW: Interfaces RefCount erhöht bei jedem Zugriff?
Danke, ja das war's! Hatte ich übersehen:oops:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:08 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 by Thomas Breitkreuz