Wenn der Speichermanager aufräumt, dann wird es auch knallen. Oder wenn inzwischen etwas Anderes an der Stelle steht, dann produziert man damit einen Buffer-Overrun,
wenn man auf ungültige Variablen zugreift.
Und das ist nicht erst seit Interfaces so.
Delphi-Quellcode:
var
o: TMyIrgendwas;
o := TMyIrgendwas.Create;
o.Free;
o.DoWas; // Fehler
o := TMyIrgendwas.Create;
FreeAndNil(o);
o.DoWas; // Zugriffsverletzung bei Addresse 0
Man kann gern die Speicherverwaltung komplett der Referenzzählung des Interfaces überlassen.
Und wenn es unbedingt sein muß, dann holt man sich "kurzzeitig" nochmal eine Objekt-Referenz aus dem Interface raus (an dieser Stelle muß parallel eine Interface-Referenz vorhanden sein), denn Delphi bietet seit einer Weile ein Pseudo-Interface an, welches die Objektreferenz zurückgibt. (wenn im Interface ein Delphi-Objekt steckt)
Und an diese Objektreferenz kommt man z.B. via
intf AS TObject
ran.
Man kann natürlich auch eigene Getter in seinem Interface verbauen, welches Objekt-Instanzen zurückgibt.
Sobald dann die "paralelle" Interface-Referenz freigegeben wird, ist die Objektreferenz als "ungültig" anzusehen.