AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Wieso lässt sich "Destroy" manuell aufrufen?
Thema durchsuchen
Ansicht
Themen-Optionen

Wieso lässt sich "Destroy" manuell aufrufen?

Ein Thema von Matze · begonnen am 10. Jan 2010 · letzter Beitrag vom 11. Jan 2010
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#1

Wieso lässt sich "Destroy" manuell aufrufen?

  Alt 10. Jan 2010, 21:55
Hallo,

rein interessehalber: Wieso lässt sich "Destroy" manuell aufrufen, obwohl man es nicht aufrufen soll?
Da bietet es sich doch an, diese Methode als "private" oder "protected" zu deklarieren, damit ein Aufruf von außen gar nicht erst möglich ist.

Liegt das in der Abwärtskompatibilität begründet?
Wenn ja, dann wäre eigentlich eine Compiler-Warnung sinnvoll.

Ganz nachvollziehen kann ich das nicht. Klärt mich auf.

Grüße, Matze
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#2

Re: Wieso lässt sich "Destroy" manuell aufrufen?

  Alt 10. Jan 2010, 22:46
Es ist keineswegs schlimm, Destroy aufzurufen. Man bekommt auch keine Pickel davon. Und die Anwendung läuft, ordentliche Implementierung vorausgesetzt, genauso sicher, wie mit Free.

Free ist doch nur was für Schlampen (falls man so blöd ist, und ein NIL-Objekt freigeben will), aber da Objekte nicht nil sein sollten, kann man doch Destroy aufrufen.

Ich verstehe die Einwände in diesem Thread sowieso nicht.

Ich sehe das so: Wenn ein Objekt NIL ist, mach ich sowieso etwas grundlegend falsch.

Ich kann mir keine Situation vorstellen bei der dieser Code *nicht* funktioniert:

Delphi-Quellcode:
MyObject := TMyObject.Creaste;
Try
  MyObject.Work;
Finally
  MyObject.Destroy;
End;
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Wieso lässt sich "Destroy" manuell aufrufen?

  Alt 10. Jan 2010, 22:51
Ja genau, Regeln und Hinweise (siehe in der Hilfe zu dem Thema) sind ja auch zu vernachlässigen. Nicht einfach mal was hinnehmen, sondern immer gegen an. Ja, das ist das was heutzutage so (im Prinzip) überall abgeht, also wieso nicht auch hier.

Und provozieren, das ist natürlich auch immer wichtig und dann schnell den richtigen Schmilie nicht vergessen, damit man hinterher immer sagen kann: oh war doch nicht so gemeint, schon klar.

Edit: Wenn ein Anfänger hier also eine Frage stellt, sollen wir ihm nur seinen konkreten Fehler erklären bzw. ihm helfen, seinen Fehler zu beheben. Falls in seinem Quellcode noch andere unschöne Dinge zu finden sind, so halten wir lieber den Rand und sagen nichts dazu? Immerhin kommen solche Aussagen ja nicht von irgend jemandem (Moderator?). Wie war das mit dem: Als Vorbild vorrangehen? Immerhin wir hier eine Antwort in einem anderen Thread an den Pranger gestellt. Da kann ich nur noch mir dem Kopf schütteln. Einfach schade.
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

Re: Wieso lässt sich "Destroy" manuell aufrufen?

  Alt 10. Jan 2010, 23:00
Zitat von omata:
Ja genau, Regeln und Hinweise (siehe in der Hilfe zu dem Thema) sind ja auch zu vernachlässigen. Nicht einfach mal was hinnehmen, sondern immer gegen an. Ja, das ist das was heutzutage so (im Prinzip) überall abgeht, also wieso nicht auch hier.

Und provozieren, das ist natürlich auch immer wichtig und dann schnell den richtigen Schmilie nicht vergessen, damit man hinterher immer sagen kann: oh war doch nicht so gemeint, schon klar.
Bauchschmerzen?

Hinnehmen ist wohl immer das beste was? Selbstständiges Denken ist unerwünscht oder was? Man oh man.. Peinlich peinlich ...

Edit: Nachdem ich jetzt dein Edit gelesen hab.. Sagmal bist du betrunken? Ich geh besser schlafen bevor ich hier irgendwelche virtuellen Mordgelüste bekomme ...
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Wieso lässt sich "Destroy" manuell aufrufen?

  Alt 10. Jan 2010, 23:02
Das war klar, dass soetwas unqualifiziertes von dir kommen muss. einfach unglaublich
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

Re: Wieso lässt sich "Destroy" manuell aufrufen?

  Alt 10. Jan 2010, 23:06
Wieso unqualifiziert?

Was war denn an deinem Beitrag qualifiziert? Das Thema was Matze angesprochen hat ist einfach nur eine Diskussion über eine gewisse Sache. Und es ist eine durchaus berechtigte Frage. Ich finde es gut wenn jemand sich mal fragt "Warum nicht eigentlich Destroy?" anstatt einfach das "Free" hinzubeeten weil es ja "so üblich" ist. Vielleicht ergibt sich ja irgendein echtes Argument GEGEN Destroy. Aber im Moment kann ich die Beiträge und (ich nenne es mal) "Zweifel" von Matze und alzaimar durchaus nachvollziehen. Wenn man ordentlich programmiert, dann ist .Free grundsätzlich nicht nötig.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Wieso lässt sich "Destroy" manuell aufrufen?

  Alt 10. Jan 2010, 23:13
Das habe ich auch gar nicht gemeint. So eine Diskussion ist doch völlig ok.
Trotzdem kann man doch einem Anfänger ruhig den Weg so erklären wie er selbst von Delphi vorgegeben wird. Immerhin steht eben genau in der Hilfe, dass man Destroy nicht selber aufrufen sollte. Gut daran muss man sich ja nicht halten. Aber man kann doch einem Anfänger wenigstens diesen Tipp geben. Was ist so schlimm daran?
Und das mit dem hinnehmen war jetzt nicht so gemeint, dass man nicht mehr selber Denken soll. Das war so gemeint, dass wenn es von Delphi (in diesem Fall von der Delphi-Hilfe) schon so vorgegeben wird und dort ganz exakt drin steht, dass man Destroy nicht selber aufrufen soll. Warum muss ich mich dann dagegen entscheiden? Was ist an dieser sehr exakten Aussage so schlimm, warum muss ich mich unbedingt dagegen entscheiden. Gut ich kann es, aber warum? Warum immer gegen an? Nur weil es toll ist immer gegen alles zu sein?
Bei so etwas kann man doch auch einfach etwas hinnehmen. Mehr war nicht gemeint.
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#8

Re: Wieso lässt sich "Destroy" manuell aufrufen?

  Alt 10. Jan 2010, 23:15
Also ich könnte mir schon vorstellen, dass man das in Delphi 1 oder früher so festgelegt hat, um dem Benutzer der Klasse doch die Freiheit zu geben, den Destruktor direkt von außen aufrufen, falls man es möchte. Und später hat man es vielleicht der Kompatibilität halber beibehalten...
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.686 Beiträge
 
Delphi 2007 Enterprise
 
#9

Re: Wieso lässt sich "Destroy" manuell aufrufen?

  Alt 10. Jan 2010, 23:23
War da nicht auch was mit Abstraktheit? Also wenn ich jetzt eine Klasse hab:

Delphi-Quellcode:
type
  TFoo = class
    private
      Bar: TBlub;
    public
      constructor Create;
      destructor Destroy;
    end;

implementation

constructor TFoo.Create;
begin
  Bar := TBlub.Create;
end

destructor TFoo.Destroy;
begin
  Bar.Free;
end;


{andere Unit}
uses UnitMitTFoo;

var
  f: TFoo;
  o: TObject;
begin
  f := TFoo.Create;
  o := f;
  o.Destroy;
end;
Wenn Destroy jetzt nicht grad abstarkt ist, ruft das den Destruktor nur von TObject auf, und hinterlässt ein erstelltes TBlub als Speicherleck. Da ich die Sourcen (bzw. Delphi) nicht hier hab, kann ich das nicht genau prüfen - aber sollte Free evtl. sowas behandeln? *kopfkratz* Irgendwas war da auf jeden Fall...
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#10

Re: Wieso lässt sich "Destroy" manuell aufrufen?

  Alt 10. Jan 2010, 23:24
Zitat von omata:
Das habe ich auch gar nicht gemeint. So eine Diskussion ist doch völlig ok.
Trotzdem kann man doch einem Anfänger ruhig den Weg so erklären wie er selbst von Delphi vorgegeben wird. Immerhin steht eben genau in der Hilfe, dass man Destroy nicht selber aufrufen sollte. Gut daran muss man sich ja nicht halten. Aber man kann doch einem Anfänger wenigstens diesen Tipp geben. Was ist so schlimm daran?
Und das mit dem hinnehmen war jetzt nicht so gemeint, dass man nicht mehr selber Denken soll. Das war so gemeint, dass wenn es von Delphi (in diesem Fall von der Delphi-Hilfe) schon so vorgegeben wird und dort ganz exakt drin steht, dass man Destroy nicht selber aufrufen soll. Warum muss ich mich dann dagegen entscheiden? Was ist an dieser sehr exakten Aussage so schlimm, warum muss ich mich unbedingt dagegen entscheiden. Gut ich kann es, aber warum? Warum immer gegen an? Nur weil es toll ist immer gegen alles zu sein?
Bei so etwas kann man doch auch einfach etwas hinnehmen. Mehr war nicht gemeint.
Also zuerst mal kann ich nirgendwo erkennen, dass hier Anfängern was "Falsches" vermittelt wird. In der Delphi Hilfe steht, man soll Free benutzen und das wird schon seinen Grund haben. Ich benutze auch nicht (auch wenn es dich vielleicht überrascht) Destroy nur weil ich GEGEN Free bin. Ich benutze selbst Free.

Es geht auch nicht darum dass hier irgendjemand Werbung für Destroy gemacht hat oder "aus Prinzip" gegen Free. alzaimar hat nur angemerkt, dass es bei sauberer Programmierung kein Problem sein sollte Destroy zu benutzen. Hast du dir mal den Code von Free angeschaut oder dir darüber Gedanken gemacht WARUM Free und nicht Destroy? Oder hast du es "einfach hingenommen" ? Ich finde es gut wenn sich Leute auch mal über Dinge Gedanken machen oder Dinge hinterfragen, die eigentlich "klar" sind oder von der Allgemeinheit "hingenommen" werden.

Von daher habe ich absolut kein Verständnis für dieses "Theater" was du da total aus heiterem Himmel provoziert hast. Es ging und geht NICHT darum immer aus Prinzip GEGEN etwas zu sein. Es geht darum sich einfach mal Gedanken zu machen und die Gedanken mit anderen zu Teilen und vielleicht ne Diskussion zu starten mit Leuten die sich auch schon darüber Gedanken gemacht haben oder durch diese Diskussion andere Leute zum Denken anzuregen.

Wenn du sowas nicht nachvollziehen kannst dann würde ich vorschlagen, dass du einfach schweigst ...

PS: Bekommt man von dir generell keine Antworten auf PNs?
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 09:52 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