Forum: Algorithmen, Datenstrukturen und Klassendesign
by Uwe Raabe,
10. Apr 2013
Das kann aber auch schief gehen. Wenn nämlich im Destroy die Instanz als Interface-Referenz verwendet wird, die wiederum eine Referenzzählung auslöst, wird mit dem _AddRef/_Release womöglich noch ein Free aufgerufen. Das gilt übrigens immer bei Abkömmlingen von TInterfacedObject und nicht nur in diesem Fall. Warum dieser Fall im constructor berücksichtigt wird, im destructor aber nicht, bleibt...
Forum: Algorithmen, Datenstrukturen und Klassendesign
by Uwe Raabe,
8. Apr 2013
Und zeig doch mal, was TGuiInterfaceBase ist.
Vielleicht kannst du das Problem auch damit lösen, daß du die Methode BeforeDestruction überschreibst und dort den Referenzzähler um 1 hochsetzt:
procedure TGUIFenster.BeforeDestruction;
begin
inherited;
Inc(FRefCount); // oder was thread-sicheres
end;
Forum: Algorithmen, Datenstrukturen und Klassendesign
by Uwe Raabe,
8. Apr 2013
Ich hätte vor dem FRepo := nil; etwas wie FRepo.Detach(Self); erwartet.