Vereinfacht gesagt sieht die Speicherstruktur so aus:
Code:
(@ Steht fόr einen Pointer)
Stack>| Heap>
Variable:
@ Interface >Interface:
@ Objekt >Objekt:
@ Interface-Methode 1 @
VMT > Methodentabelle:
@ Interface-Methode 2 Felder und Co. @ Objekt-Methode 1
@ Interface-Methode n @ Objekt-Methode 2
@ Objekt-Methode n
@Variable = Pointer auf die Variable auf dem Stack
Pointer(Variable) = Pointer auf Interface auf dem Heap
Ersteres ist eine schlechte Idee, da natόrlich der Stack sich jederzeit δndert kann.
Zweiteres ist auch eine schlechte Idee, da am Ende einer Funktion Delphi automatisch alle lokalen Interfaces freigibt, d.h. es wird erst Variable._Release aufgerufen, wenn der Refcounter 0 ergibt, wird das Objekt freigegeben.
Anschlieίend wird aber IMMER das Interface selbst freigegeben, auch wenn das Objekt nicht zerstφrt wird.
Wenn du also einen Pointer auf ein lokales Interface woanders weiter verwendest, geht das hφchstwahrscheinlich in die Hose.