AGB  ·  Datenschutz  ·  Impressum  







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

Wann Destruktor-Aufruf nötig?

Ein Thema von Cöster · begonnen am 26. Okt 2006 · letzter Beitrag vom 28. Okt 2006
Antwort Antwort
Seite 1 von 3  1 23      
Cöster

Registriert seit: 6. Jun 2006
589 Beiträge
 
Turbo Delphi für Win32
 
#1

Wann Destruktor-Aufruf nötig?

  Alt 26. Okt 2006, 15:36
Hi!

In welchen Fällen ist es eigentlich sinnvoll, den Destruktor aufzurufen? Wenn ich z.B. eine Instanz beim Programmstart per FInstanz := TKlasse.Create; erzeugt habe und den Konstruktor später nochmal aufrufen möchte, um alle Eigenschaften der Instanz zurückzusetzen, ist es dann nötig, vorher die alte Instanz zu destroyen?

Wann ist der Aufruf von FInstanz.Destroy überhaupt angebracht? Nur beim Programmende?
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Wann Destruktor-Aufruf nötig?

  Alt 26. Okt 2006, 15:41
Hallo,

1. schreibe eine Methode Clear, die du sowohl im constructor
als auch bei Bedarf aufrufen kannst.

2. rufe nie Destroy direkt auf, sondern nimm Free.

Mit Clear brauchst du erst am Programmende Free aufrufen.


Heiko
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von Hador
Hador

Registriert seit: 11. Dez 2004
Ort: Recke
682 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Wann Destruktor-Aufruf nötig?

  Alt 26. Okt 2006, 15:53
Zitat von Cöster:
In welchen Fällen ist es eigentlich sinnvoll, den Destruktor aufzurufen? Wenn ich z.B. eine Instanz beim Programmstart per FInstanz := TKlasse.Create; erzeugt habe und den Konstruktor später nochmal aufrufen möchte, um alle Eigenschaften der Instanz zurückzusetzen, ist es dann nötig, vorher die alte Instanz zu destroyen?
Wenn es nur darum geht, einige Eigenschaften auf einen Ausgangswert zurückzusetzen, kannst du dies natürlich auch tun ohne das jeweilige Objekt zu zerstören.

Zitat von Cöster:
Wann ist der Aufruf von FInstanz.Destroy überhaupt angebracht? Nur beim Programmende?
Erzeuge ein Objekt sobald du es brauchst und zerstöre es, wenn du es nicht mehr brauchst.
Lars Kiesow
http://www.larskiesow.de

Computer gehorchen deinen Befehlen, nicht deinen Absichten.
  Mit Zitat antworten Zitat
Cöster

Registriert seit: 6. Jun 2006
589 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Wann Destruktor-Aufruf nötig?

  Alt 26. Okt 2006, 18:32
Warum zerstört Delphi eigentlich nicht automatisch alles am Programmende?
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#5

Re: Wann Destruktor-Aufruf nötig?

  Alt 26. Okt 2006, 19:08
Du stellst dir das etwas zu einfach vor, dafür bräuchte Delphi schon einen richtigen (naja, > 3/4) Garbage Collector. Und außer bei Klassen, die ein Handle auf externe Ressourcen halten, ist das Freigeben bei Programmende sowieso egal.
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Wann Destruktor-Aufruf nötig?

  Alt 26. Okt 2006, 19:13
Jop, um Khabarakhs Äußerung ein wenig zu präzisieren, Windows markiert Speicher, den ein Programm gehalten hatte, wieder als frei, wenn das Programm beendet wird.
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Cöster

Registriert seit: 6. Jun 2006
589 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Wann Destruktor-Aufruf nötig?

  Alt 26. Okt 2006, 19:34
Dann sind Meinungen wie "jede Klasse braucht einen Destruktor" doch eigentlich Quatsch. Bei Klassen, die das ganze Programm über gebraucht werden, ist es doch dann meistens unnötig, überhaupt einen zu deklarieren, oder?
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#8

Re: Wann Destruktor-Aufruf nötig?

  Alt 26. Okt 2006, 19:38
Eine Klasse weiß nicht, wie lange sie gebraucht wird(OOP). Sie sollte deshalb alles, was sie alloziiert, auch wieder freigeben. Das ist guter Stil.

Und Pauschalaussagen sind zwar meist kein "Quatsch", aber es gibt trotzdem immer Ausnahmen

PS: Schon TObject hat einen Destruktor. EIne Klasse ohne Destruktor gibts also gar nicht
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Cöster

Registriert seit: 6. Jun 2006
589 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: Wann Destruktor-Aufruf nötig?

  Alt 26. Okt 2006, 20:11
Zitat von DGL-luke:
Schon TObject hat einen Destruktor. EIne Klasse ohne Destruktor gibts also gar nicht
Macht es bei Klassen, die von TObject direkt abgeleitet sind eigentlich sinn, inherited Create bzw. Destroy aufzurufen? Denn in TObject.Create bzw. Destroy passiert ja nix.
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#10

Re: Wann Destruktor-Aufruf nötig?

  Alt 26. Okt 2006, 21:42
Zitat von Cöster:
Macht es bei Klassen, die von TObject direkt abgeleitet sind eigentlich sinn, inherited Create bzw. Destroy aufzurufen? Denn in TObject.Create bzw. Destroy passiert ja nix.
Nötig ist es nicht, da beide nichts machen. Das kann sich aber ändern. Und bei Delphi.NET hat es sich bereits geändert. Der .NET Compiler meckert wenn du kein inherited Create aufrufst.
Ein anderer Punkt ist, wenn man später mal feststellt, dass die Klasse doch besser von einer anderen Erben soll. In diesem Fall kann ein fehlender inherited Create Aufruf zu Problemen führen.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 16:08 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