OK, wenn es NUR "Eigenes" ist,
aber ALLE Interfaces implementieren 3 Funktionen für die Speicherverwaltung,
und Zwei davon treffen auf deine Bedingungen zu. (hat Result und keine Parameter)
Delphi-Quellcode:
IInterface = interface
['{00000000-0000-0000-C000-000000000046}']
function QueryInterface(const IID: TGUID; out Obj): HResult; stdcall;
function _AddRef: Integer; stdcall;
function _Release: Integer; stdcall;
end;
Zitat:
Interface auf ein nicht mehr existierendes Object referenziert
Wenn man nicht an der Speicherverwaltung rumpfuscht, kann sowas eigentlich nicht passieren,
denn Interfaces räumen sich selbst auf, wenn keine Variable mehr auf sie zeigt.
OK "eigentlich" ... auch viele TComponent implementieren Interfaces, aber dort mit deaktivierter Referenzzählung (_AddRef und _Release machen nichts),
also dort hat nicht das Interface die Controlle, sondern die
VCL und solche Interface-Zeiger können wirklich ins Nirvana zeigen.
(drum sollte man an dieser Stelle das Interface nur kurz nutzen)
PS: Unter Anderem dafür gibt es das [unsafe].
https://blog.marcocantu.com/blog/201...eferences.html
https://dalijap.blogspot.com/2022/11...s-part-ii.html
Abgesehn von so Dingen wie bei TComponent,
sollte man es möglichst vermeiden gleichzeitig Interface- und Objekt-Referenzen zu haben.
So gibt es auch keine potentiellen Streitigkeiten, wer das Objekt aufräumt.