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