Verständnisfragen zu new Element() und Destruktoren



  • LordJaxom schrieb:

    Xebov schrieb:

    ich glaube nämlich das wir hier schon ähnliches Meinen aber uns irgendwie nicht ganz verstehen.

    Wundert Dich das? Beziehungsweise, merkst Du wie die oben eingestreuten Kommas und Punkte (die Großschreibung habe ich schon nur nach dem Punkt betrachtet) die Lesbarkeit steigern?

    Ich hoffe du bist nicht böse wenn ich sage nein, ich habs schließlich geschrieben also wäre es ja peinlich wenn ichs selbst nicht lesen könnte.

    Dravere schrieb:

    Xebov schrieb:

    Ja ich weis, ist nix neues, ich gebs auch erstmal auf, ich glaube nämlich das wir hier schon ähnliches Meinen aber uns irgendwie nicht ganz verstehen.

    Bitte nicht aufgeben, wir kriegen das noch hin, ich streng mich auch an 🙂
    Bin irgendwie wahnsinnig neugierig darauf, was es am Ende war. Das ist wie ein Weihnachtsgeschenk, welches man einfach nicht aufkriegt 😃

    Grüssli

    Naja freut mich das ich da für Spannung sorge. 😃

    Aber ich denke trotzdem wir lassen das Thema mal ruhen. Sonst wird das ganze zu Spekulativ, denn was könnte jemand falsch Interpretiert haben usw das bringt nix.



  • Xebov schrieb:

    ...
    3. Das hab ich ja auch nie behauptet, ich war nur der Meinung er hatte den Post auf den er sich bezog falsch verstanden....

    Wie hättest Du denn das hier:

    tallan schrieb:

    ...
    nehmen wir folgenden code :

    Myklasse * a = new Myklasse();

    ...
    2) wird der Konstruktor aufgerufen, nach beendigung des programms aber kein explizit deklarierte destruktor ?!...

    =>

    daersc schrieb:

    wobei modernere betriebssysteme den destruktor automatisch beim verlassen des programmes aufrufen....

    anders verstanden?

    Ich persönliche vermute ja, dass daersc meinte: "Moderne Betriebssysteme geben nach Beendigung Einer Anwendung automatisch den Speicher wieder frei, selbst wenn die Anwendung keine Freigabe beantragt hat."

    Das ist aber eben nicht dasselbe wie der Aufruf eines Destruktors ... und (nur) um Letzteres drehte sich hier die ganze Frage.

    Gruß,

    Simon2.

    P.S.: Ich glaube ein Problem hier im Forum ist, dass es bei diesem Thema seeeeehr um Genauigkeit geht. Deswegen fallen leichte "Formulierungsschwächen" hier ebenso viel schneller aus dem Rahmen wie auch ein Schreibstil, der in in anderen Foren vielleicht vollkommen in Ordnung ist (und sich dort angewöhnt wurde).


  • Administrator

    Xebov schrieb:

    Aber ich denke trotzdem wir lassen das Thema mal ruhen. Sonst wird das ganze zu Spekulativ, denn was könnte jemand falsch Interpretiert haben usw das bringt nix.

    Es ist deine Entscheidung. Ich frage mich einfach, ob du womöglich nicht etwas falsch verstanden hast. Also ob du etwas in C++ falsch verstehst. Daher wäre es vielleicht auch für dich sinnvoll, wenn man dies sauber ausarbeiten würde.

    Grüssli



  • Ok, ich hole mal die Posts zusammen, hoffe ich erwische alle.

    daersc schrieb:

    wobei modernere betriebssysteme den destruktor automatisch beim verlassen des programmes aufrufen.
    aber es bleibt weiterhin ein schlechter programmierstil, wenn man die objekte nicht selbst zerstört

    ->

    Simon2 schrieb:

    daersc schrieb:

    wobei modernere betriebssysteme den destruktor automatisch beim verlassen des programmes aufrufen....

    hmmmm, wirklich?
    Also dass ein OS den Speicher wieder freiräumt und ggf. andere OS-verwaltete Ressourcen freigibt (Filehandles, ...), mag ich ja noch glauben. Aber einen Dtor, der vielleicht noch andere "Aufräumarbeiten" erledigt, aufzurufen, traue ich ihm nicht zu.

    So darauf hab ich mich bezogen, auf Simons Post der sich auf daersc Post bezog. Ich bin davon ausgegangen das Daersc einfach RAII meint. Und nicht irgendwelche Extras.

    Deswegen hab ich auch geschrieben das er wohl nur für das Programm existente Destruktoren meint, also kurz die die durch RAII erfasst werden denn die die von new Objekten stammen kommen ja nicht ohne delete zum Aufruf, ich hoffe das ist jetzt verständlich, es geht dabei nicht um die Frage ob der Destruktor da ist oder nicht, denn natürlich ist er imemr da, sondern um die Sicht des Programms auf das Objekt.

    Danach hab ich mich auf die Aufräumarbeiten bezogen und angemerkt das ein OS durchaus den Speicher des Programms Tracken könnte und ihn freigeben köntne wenn das Programm stirbt, oder die Teile eben durch Schlamperei oder Fehler nicht freigegeben wurden. Damit würde es weitere Aufräumarbeiten übernehmen.

    So ich hab mich diesmal echt bemüht und hoffentlich genug Satzzeichen drin das es jeder lesen kann.


  • Administrator

    💡 ! ACHSO ! 💡

    😃

    Deine Argumentation geht aber nicht ganz auf. Wenn man nur den ersten Satz von daersc anschauen würde, dann könnte man vielleicht meinen, dass er einfach nur die Objekte meint, welche auf dem Stack angelegt wurden, bzw. welche eine automatische Verwaltung haben. Beim Verlassen des Programmes, würde dann heissen, beim Verlassen des main-Scopes.

    Aber der zweite Satz sagt eigentlich aus, welche Objekte er meint. Er meint wirklich die Objekte, welche per new angelegt wurden. Denn man kann, bzw. sollte keine Objekte selber zerstören, welche auf dem Stack liegen, bzw. eine automatische Verwaltung haben.

    Zudem ruft da auch nicht das Betriebsystem die Destruktoren auf, sondern es macht noch dein eigenes Programm.

    Aufräumarbeiten was den reinen Speicher betrifft, erledigt ein modernes Betriebsystem meistens schon. Allerdings das mit void und co, wird womöglich eher anders erledigt 😉

    Es fehlen übrigens immer noch Satzzeichen 😃

    Grüssli



  • Dravere schrieb:

    💡 ! ACHSO ! 💡

    😃

    Ah der Knoten ist raus, da freu ich mich 😃

    Dravere schrieb:

    Aufräumarbeiten was den reinen Speicher betrifft, erledigt ein modernes Betriebsystem meistens schon. Allerdings das mit void und co, wird womöglich eher anders erledigt 😉

    Jo, war ja wie gesagt nur ein Gedankengang, wobei das wie evtl auchmal ganz interessant wäre.

    Dravere schrieb:

    Es fehlen übrigens immer noch Satzzeichen 😃

    Egal, es war immerhin verständlich.



  • Xebov schrieb:

    ...So ich hab mich diesmal echt bemüht und hoffentlich genug Satzzeichen drin das es jeder lesen kann.

    Danke - ist wirklich viel besser! 👍

    Xebov schrieb:

    ...Ich bin davon ausgegangen das Daersc einfach RAII meint. Und nicht irgendwelche Extras....

    Nunja, daersc hat sich allerdings explizit auf manuelle Speicherverwaltung ("new") bezogen, die eben gerade genau das Gegenteil von RAII ist.
    Und dann nannte er das Betriebssystem ... und das weiß nichts mehr von RAII (und eben auch nichts mehr von Destruktoren).

    Ist ja egal, weil anscheinend daersc nicht mehr dabei ist, um uns zu erklären, ob er sich geirrt oder vertippt oder einfach deutlich tieferes Wissen als ich hat.

    Für mich bleibt inhaltlich eben bestehen:

    Aber einen Dtor, der vielleicht noch andere "Aufräumarbeiten" erledigt, aufzurufen, traue ich ihm [dem OS] nicht zu.
    Vielleicht packt das eine ausgefeilte Runtimelib ... aber spätestens bei ausgefeilten Abhängigkeiten (bei denen z.B. die Reihenfolge wichtig ist) wird das auch nicht klappen. ...

    Gruß,

    Simon2.


Anmelden zum Antworten