Tak Claus
Den må jeg hellere tykke på
PL
"Claus Christiansen" <cch@unipeople.dk> skrev i en meddelelse
news:eP7%6.575$DJ5.80311@news010.worldonline.dk...
> "P.L." <jessie-peter@get2net.dk> wrote in message
> news:9hiqem$5hc$1@news.inet.tele.dk...
> > Hej NG
> >
> > Hvad er egentlig forskellen på Free og Destroy?
> > Jeg er godt bekendt med, at man godt kan Free en komponent, som tidligere
> er
> > 'freeed', uden at få
> > 'nogen på hatten', hvilket ikke gælder for Destroy.
> > Hvorfor har man så også kommandoen Destroy ???
> >
>
> Destroy er den, der gør det hårde arbejde, idet en free (og brug ALTID den)
> blot undersøger om p <> nil og kun kalder p.destroy hvis dette er tilfældet
> og ellers ikke har nogen effekt, hvis altså programmøren af alle de klasser
> der nedarves fra ikke har dummet sig (reimplementeret free).
>
> ex:
> procedure TObject.Free;
> begin
> // Self er jo en parameter der altid overføres implicit!
> if self <> nil then self.destroy;
> end;
>
> For dem der hellere vil have asm-versione, er free er i virkeligheden
> implementeret som:
> asm
> // EAX indeholder her pointeren, der svarer til
> self
> TEST EAX,EAX // <> nil kontrollen (nil er pt. defineret som 0
> [nul] )
> JE @@exit // ...hvis nil så hop ud
> MOV ECX,[EAX] // Hvis nogen lige ved hvorfor så...!?!?
> MOV DL,1 // ...
> CALL dword ptr [ECX].vmtDestroy // Call destroy
> @@exit:
> end;
>
> Hvilket også vil sige at du altid skal huske at sætte din variabel til nil
> efter et kald til free ellers vil det være ligegyldigt om du kalder free
> eller destroy - resultatet vil være en fejl! (Dog ikke den samme fejl, men
> det er jo for så vidt sagen uvedkommende :) )
>
> Og hvis vi så lige skal forklare hvorfor man ikke blot har lavet en destroy
> der fungerer som free (altså undersøger <> nil først) så skyldes det at det
> ikke er muligt at lave destroy virtual (hvilket man jo gerne vil så man
> senere i hierarkiet har mulighed for at override den oprindelige) og
> samtidig give mulighed for at undersøge om self <> nil. - Det var måske ikke
> lige den mest forklarende tekst, men det vil vist føre lidt for vidt omkring
> hvis det skulle forklares til bunds (måske man skulle forske lidt mere i det
> og skrive en artikel om det til pythia.dk).
>
>
> Claus
>
> PS: Nå det var vist en længere sludder, men hva' f* det skal der jo også
> være plads til!
>
> PSPS: Hvis nogen har nogen kommentarer er de meget velkomne, som sagt kunne
> jeg godt finde på at skrive en kort artikel om emnet.
> --
> Claus Christiansen, TeamD member <cch@unipeople.dk>
>
> Pythia:
http://www.pythia.dk/
> Personal:
http://www.bigfoot.com/~kruc
> ============================================-------------------------
> "Computers are useless. They can only give you answers."
> -- Pablo Picasso (1881-1973)
>
>