Einzelnen Beitrag anzeigen

Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beitrδge
 
FreePascal / Lazarus
 
#7

AW: pointer auf Interface als messageparameter

  Alt 27. Mδr 2011, 16:05
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.

Geδndert von Namenloser (27. Mδr 2011 um 16:14 Uhr)
  Mit Zitat antworten Zitat