AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi EigenesObjekt.free - klappt nicht so richtig???
Thema durchsuchen
Ansicht
Themen-Optionen

EigenesObjekt.free - klappt nicht so richtig???

Ein Thema von Portabella · begonnen am 15. Jul 2004 · letzter Beitrag vom 15. Jul 2004
Antwort Antwort
Portabella

Registriert seit: 20. Jun 2004
45 Beiträge
 
#1

EigenesObjekt.free - klappt nicht so richtig???

  Alt 15. Jul 2004, 12:15
Hallo,

ich möchte die von mir erzeugte Instanz einer Klasse (eigene) gerne freigeben. Ich dachte das geschieht mit meineInstanz.free;
Wenn ich im nächsten Schritt allerdings auf Variablen meines "freigegebenen" Objektes zugreife bekomme ich nicht NIL als Rückgabewert, sondern den Wert der entsprechenende Variable. Kann mir jemand sagen, warum das so ist? Kann ich statt meineInstanz.free auch einfach meineInstanz := NIL machen?

Vielen Dank im Voraus,

Gruß, Diana
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: EigenesObjekt.free - klappt nicht so richtig???

  Alt 15. Jul 2004, 12:20
Die Kombination auf .free und := NIL führt letzendlich zum Erfolg

Delphi behält freigegebenen Speicher noch etwas, für den Fall dass der in Kürze wieder gebraucht wird. So muss dieser nicht immer neu alloziiert werden -> schneller. Somit sind die Adressen deines Objektes noch gültig, auch wenn du es schon gefreet hast. Setzt du aber gleich noch Objekt := NIL, dann ist sicher gestellt, dass du nicht mehr auf ein eigentlich nicht mehr existierendes Objekt zugreifen kannst. Ab Delphi 6 oder 7 gibts auch die Methode FreeAndNil(TObject). Die macht intern nichts anderes als das was ich grad schrieb sieht nur schicker aus.

\\edit: Nur mit Objekt := NIL erzeugst du dir nen Speicherleck. D.h. du hast keinen Verweis mehr auf das Objekt, aber der Speicher wurde auch nicht freigegeben. Somit bleibt der Speicher bis zum Programmende belegt, und du kommst nie wieder dran. Das wäre die schlechteste Lösung. Java hingegen erkennt dass, und gibt den Speicher selbst frei sobald kein Zeiger mehr darauf existiert. Auch .NET arbeitet so (GarbageCollection bzw. Referenzzählung sind die Stichworte, und datt gibbet bei Win32 (mit Ausnahmen) nicht).

gruss,
dizzy
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3

Re: EigenesObjekt.free - klappt nicht so richtig???

  Alt 15. Jul 2004, 12:24
Kuckst du hier: http://www.delphipraxis.net/internal...=197009#197009
Zu beachten sind auch die folge Postings.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Portabella

Registriert seit: 20. Jun 2004
45 Beiträge
 
#4

Re: EigenesObjekt.free - klappt nicht so richtig???

  Alt 15. Jul 2004, 12:29
Super - vielen Dank für die schnelle und gute Erklärung!

Viele Grüße,

Diana
  Mit Zitat antworten Zitat
Antwort Antwort


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 13:54 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz