Ich füge zu der Liste noch das klassische Problem von Referenzzählung hinzu:
Dein Problem ist, dass eine Interface instanz eine Interface instanz besitzt, die eine Referenz auf die Container instanz hält, right?
Mit RefCounting lässt sich dieser Zustand nicht elegant lösen.
Beiden halten somit mindestens ein Referenz (sich gegenseitig) obwohl sie vielleicht schon beide vom Programm aus nicht mehr referenziert werden können.
Eine billige Lösung wäre TAggregatedObject als Basisklasse für das untergeordnete Element.
Dabei werden AddRef/Release zum Controller durchgeschliffen. Aber auch das ist nur ein dummer Hack.
Ein Release auf den Controller wird kein Release des Aggregatfeldes auslösen und somit ist nicht sichergestellt, dass es mit freigegeben wird.
Außerdem gibt es keinerlei Garantie dass es immer geht, denn du wirst oft feststellen dass in solchen Situationen...
Delphi-Quellcode:
begin
with ControllerFactory.GetController do
GetDingsBums.DoSomething();
end;
... weder Controller noch Dingsbums freigegeben werden _könnten_.
Vielleicht bin ich als .Net Entwickler zu verwöhnt um mir wegen solchen dummen Kleinigkeiten wie RefCounting die Laune vermiesen zu lassen.
Aber wenn das ein neues Projekt wird, dann nehme .Net solange es dir noch möglich ist.
Diese Spielereien mit Interfaces unm explizites Freigeben zu verhindern sind ja ganz nett (selbst oft genutzt..). Aber
IMHO viel zu nervig als eine Garbage Collection, die kein RefCounting braucht...