AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Probleme mit Data (Pointer)

Offene Frage von "Chatfix"
Ein Thema von ranftl · begonnen am 22. Mai 2006 · letzter Beitrag vom 26. Feb 2007
 
Muetze1
(Gast)

n/a Beiträge
 
#26

Re: Probleme mit Data (Pointer)

  Alt 26. Feb 2007, 08:38
Zitat von chaosben:
Hey Thomas,
du machst mich ja ganz kirre.
Genau lesen! Ich habe folgendes aus der bisherigen Diskussion von euch gelernt:

1. mit Dispose() freigegebene Dinge braucht man nicht mit Finalize bearbeiten (wurde zuvor behauptet, wurde nicht widersprochen)
2. Finalize() braucht den richtigen Typ um zu arbeiten, damit er die Struktur ordentlich abräumen kann.
3. Dispose() würde mit einem untypisierten Pointer noch immer den Speicher ordentlich freigeben. Er kann dann aber nicht die internen, aktiven Elemente abräumen (Finalize)
4. Dispose() würde mit einem typisierten Pointer ein Finalize (siehe Punkt 1) mit enthalten und dann den Speicher freigeben.

Somit, habe ich mit der Frage zuvor folgendes klären wollen: Wenn man das Finalize() vor dem Dispose selbst aufruft (Finalize braucht immer den genauen Typ), dann kann man Dispose() mit einem untypisierten Pointer aufrufen. Denn: den typisierten Pointer braucht Dispose() nur, wenn man vorher kein Finalize() gemacht hat, und somit Dispose() dies mit macht. Diese Behauptung stützt sich auf den 1. Punkt.

Ich habe in der vorherigen Frage nur noch mal nachgehakt, da Dispose() den alloziierten Speicherbereich immer freigeben kann - dafür braucht er keinen typisierten Pointer. Das wollte ich nochmal genau nachfragen. Wenn man das Finalize() aber Dispose() mit überlassen will, dann muss der richtige Typ beim Aufruf angegeben werden.

Dispose() hat als Gegenstück zu New() augenscheinlich nur die Hauptaufgabe Speicher zu alloziieren und zu dealloziieren. New() braucht dabei immer einen Typ, da er sich daraus die Grösse des alloziierenden Speichers ableitet. Dispose() braucht sich diese Grösse nicht mehr neu abzuleiten aus dem Typ, da sie vom Speichermanager hinterlegt wurde bei der Alloziierung. New() macht grundsätzlich ein Initialize(), wenn solche o.g. aktiven Typen enthalten sind. Dispose kümmert sich vor dem freigeben entsprechend um das Finalize() - und genau dafür braucht er den Typ - für das reine freigeben des alloziierten Speichers nicht.

Initialize() und Finalize() werden benötigt, wenn man aktive Typen in z.B. einer Struktur hat, welche nicht mit den intelligenten Funktionen New()/Dispose() verwaltet werden, sondern z.B. über AllocMem(), GetMem(), etc und deren Gegenstücke.

Jetzt klarer? Bzw. kannst du mir nun nochmal bitte meine Frage vom Beitrag zuvor entweder bestätigr oder entsprechend korrigieren?
  Mit Zitat antworten Zitat
 

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:19 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz