Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Interfaces RefCount erhöht bei jedem Zugriff? (https://www.delphipraxis.net/155302-interfaces-refcount-erhoeht-bei-jedem-zugriff.html)

webcss 17. Okt 2010 19:32

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:
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;
Jedesmal, wenn ich b.GetFoo aufrufe, wird FFoo.RefCount erhöht.
Ist das korrekt so oder mach ich was falsch?

himitsu 17. Okt 2010 19:59

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:
TBar=class(TInterfacedObject, IBar)
FFoo: IFoo; <<<<<<<
...
function GetFoo: IFoo;
...
end;
Object > Interface = ein Interface wird erstellt und somit wird der Zähler erhöht


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.

webcss 18. Okt 2010 06:17

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 09:47 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz