Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Wieso lässt sich "Destroy" manuell aufrufen? (https://www.delphipraxis.net/145916-wieso-laesst-sich-destroy-manuell-aufrufen.html)

Matze 10. Jan 2010 20:55


Wieso lässt sich "Destroy" manuell aufrufen?
 
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

alzaimar 10. Jan 2010 21:46

Re: Wieso lässt sich "Destroy" manuell aufrufen?
 
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 :mrgreen: (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;

omata 10. Jan 2010 21:51

Re: Wieso lässt sich "Destroy" manuell aufrufen?
 
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.

Neutral General 10. Jan 2010 22:00

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

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? :roll:

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

Edit: Nachdem ich jetzt dein Edit gelesen hab.. Sagmal bist du betrunken? Ich geh besser schlafen bevor ich hier irgendwelche virtuellen Mordgelüste bekomme ...

omata 10. Jan 2010 22:02

Re: Wieso lässt sich "Destroy" manuell aufrufen?
 
Das war klar, dass soetwas unqualifiziertes von dir kommen muss. einfach unglaublich

Neutral General 10. Jan 2010 22:06

Re: Wieso lässt sich "Destroy" manuell aufrufen?
 
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.

omata 10. Jan 2010 22:13

Re: Wieso lässt sich "Destroy" manuell aufrufen?
 
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.

mirage228 10. Jan 2010 22:15

Re: Wieso lässt sich "Destroy" manuell aufrufen?
 
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...

Medium 10. Jan 2010 22:23

Re: Wieso lässt sich "Destroy" manuell aufrufen?
 
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...

Neutral General 10. Jan 2010 22:24

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

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?


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:06 Uhr.
Seite 1 von 2  1 2      

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