Einzelnen Beitrag anzeigen

lizardking

Registriert seit: 2. Sep 2005
76 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: TInterfaceList und lokale Referenzen

  Alt 26. Jul 2006, 21:42
Zitat von andreash:
Ich halte noch an der These fest, dass
LHandle := (FPlugins.Items[i] as ITWPlugin).Handle; den Referenzzähler hochzählt und zu spät wieder herunterzählt.

Tada

Ich geb Dir jetzt mal zu 50% Recht . Okay, sogar etwas mehr als 50%. Es ist in der Tat so, dass genau in dieser Zeile der ... aeh... nein... DIE Referenzzaehler hochgezaehlt werden. Und zwar passiert naemlich Folgendes:

1. Holen des Interfaces aus FPlugins -> Erhoeht Ref.-Zaehler fuer IInterface
2. Cast auf ITWPlugin -> Erhoeht Ref.-Zaehler fuer ITWPlugin

Dann ist auch das klar:

Delphi-Quellcode:
procedure Foo();
var
  x: ITWPlugin;
begin
  x := FPLugins[0] as ITWPlugin;
  x := nil;
end;
Referenzzaehler fuer ITWPlugin geht natuerlich auf 0. Aber: Referenzzaehler fuer IInterface wird erst nach beenden der Prozedur runtergezaehlt und dementsprechend erst dann das Objekt zerstoert.

In dem Sinne, Danke fuer die Antworten. Jetzt kann ich wieder ruhig schlafen *g*. Thema ist somit geklaert

Gruesse,

Lizzy
  Mit Zitat antworten Zitat