AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Destructor: .Free oder .Destroy?

Ein Thema von Ares · begonnen am 21. Nov 2007 · letzter Beitrag vom 21. Nov 2007
Antwort Antwort
Ares

Registriert seit: 5. Dez 2002
269 Beiträge
 
#1

Destructor: .Free oder .Destroy?

  Alt 21. Nov 2007, 09:47
Hallo!

Gibt es irgendeine Regel/Konvention ob der Destructor einer eigenen Klasse besser Free oder Destroy heißt? Bei der Arbeit mit fremden Klassen und Komponenten habe ich bis jetzt eigentlich immer nur Free benutzt. Da es meist aber auch ein Destroy gibt frage ich mich, wo eigentlich der Unterschied ist. Was sollten die beiden Methoden machen?

Besten Dank
Ares
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Destructor: .Free oder .Destroy?

  Alt 21. Nov 2007, 09:48
Der Destruktor ist immer Destroy. Free ist eine ganz normale Methode, die aber Destroy aufruft.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#3

Re: Destructor: .Free oder .Destroy?

  Alt 21. Nov 2007, 09:58
Obwohl Manuel Deine Frage schon beantwortet hat, möchte ich noch mal ergänzen:

Aufrufen solltest Du immer Free (wie im Beitrag zuvor zu lesen, ruft Free für Dich Destroy auf). Selbst implementieren hingegen solltest Du als Destruktor immer Destroy.
Der Unterschied liegt darin, dass Free eine einfache Überprüfung durchführt, ob die Variable eine gültige Adresse referenziert. So werden Objekte mittels Create irgendwo im Speicher erzeugt und Dir wird eine Referenz (eine Art typisierter Zeiger auf ein Objekt) zurückgegeben. Als ungültig wird nur die Adresse nil erkannt, da hier garantiert kein Objekt liegen kann. Jede andere Adresse (also mind. 2^32 - 1) erscheint hingegen gültig. Wird also das Objekt hinter einer Variablen freigegeben und ist ein weiterer Zugriff auf diese Variable möglich (z.B. da sie einen globalen Scope besitzt), dann solltest Du dieser Variable anschließend nil zuweisen (oder FreeAndNil verwenden). Wird die Variable nicht mehr gelesen (z.B. weil sie nur lokal ist) oder wird ihr gleich im Anschluss ein neues Datum (mittels Create) zugewiesen, so ist das natürlich nicht nötig.

Gruß Der Unwissende
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Destructor: .Free oder .Destroy?

  Alt 21. Nov 2007, 09:59
Der destruktor heißt .Destroy() sollte aber nie direkt aufgerufen werden.
Markus Kinzler
  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 15:07 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