Auch hier gilt: Nicht die Supports-Funktion ist schlecht oder fehlerhaft, sondern der Programmierer hat einen Fehler gemacht!
Delphi-Quellcode:
var
MySomeThingObject : ISomeThing; // <--- das ist so richtig
Während das hier schief geht, wenn in DoSomeThing auf objekteigene Werte zugegriffen wird, denn die sind dann schon freigeben und genullt:
Delphi-Quellcode:
var
MySomeThingObject : TMyDoSomething; // <--- da ist die entscheidene Stelle, Fehler!!!
Naja. Der Fehler liegt doch etwas tiefer. Letztenendes ist es der Fehler der Compiler-Entwickler, die die Interfaces bei Delphi vermasselt haben. Diese Idee vom 'Interfaces nie als Objekte verwenden' stammt doch aus der Zeit, als man noch geglaubt hat, dass alle Objekt in 5 Monaten nur noch
ActiveX-Objekt sein werden, (und dass das mehr oder weniger der heilige Gral ist). Im Licht der täglichen Praxis und im Angesicht von Design-Patterns erscheint diese Idee ziemlich absurd.
Eine solidere Lösung wäre einen Compiler zu verwenden, der besser ist (z.B. FreePascal mit "Corba-Interfaces").
Wenn man bei Delphi bleibt muss man eben den unsichtbaren Refenz-Zähler Kram so gut es geht aushebeln und höllisch aufpassen.
P.S: Zur Laufzeit mit Supports zu arbeiten ist etwas, was man so gut es geht vermeiden sollte. Eine Haupterrungenschaft der Objektorientierung war, dass man statt mit schwammigen Pointern jetzt mit feste Typen arbeiten kann. Wenn man jetzt wieder anfängt zur Laufzeit Pointer herumcasten ist das irgendwie sehr Retro.