Klingt nett. Selbst in Pascal wird es schon schwer und wenn man das hier lieft.
Die Interface-Referenzzählung wird im ARC standardmäßig auf die ARC-Referenzen des internen Objektes umgeleitet. Ich vermute/hoffe einfach mal, daß es im C++ genauso bemacht wurde.
Es gäbe also keinen Unterschieg, ob in einem System mit ARC, eine Referenz auf das Interface oder auf das interne Objekt existiert.
Das Problem beschäftigt mich schon seit paar Jahren immer mal wieder.
Vorallem in Bezug auf Kreuzreferenzen zwischen zwei und vorallem mehreren Objekten.
Parent kennt seine Kinder, die Kinder und Kindeskinder ihre Parents und ohne daß sie sich alle gegenseitig im Speicher halten, wenn alle externen Referenzen freigegeben sind, sollen die Eltern nicht verschwinden, selbst wenn nur noch eine Referenz auf ein Kind existiert.
Weak-Referenzes hätte man auch gleich mal überall einbauen können, wenn man schon dabei ist, selbst wenn es dort noch kein ARC gibt.
Mein Fazit: Es ist nahezu unmöglich einen (größeren) Code zu scheiben, welcher in allen Plattformen problemlos zu verwenden ist, ohne viel Arbeit und ohne das in jedem System einzeln zu testen, anzupassen und wieder alles zu testen.
Und ständig muß man mit irgendwelchen blöden Kompromissen leben. (wenn man nicht überall seinen Produktiv-Code mit tausenden IFDEFs vollpflasteren will)
Die berühmte Abwärtskompatibilität und alles funktioniert in Jahrzehnten immernoch, hat sich damit erledigt.
Für Delphi (vorallem Windows) hab ich mir jetzt Weak-Referenzes selbet gebaut und hoffe die funktionieren überall so, wie ich es mir denke, auch mit ARC und Co.