A
Anderer Basher
Gast
Richtig. Genau darum gehts. Und genau das ist in Java nicht der Fall. Ich muss manuell irgendwas closen.Dass der Code für die Speicherverwaltung komplett wegfällt, das ganze recht schnell ist und ich da absolut keinen Fehler mehr machen kann halte ich für wesentlich wichtiger für die "Schönheit".
kaum != gar nichtsDer Rest wird fast immer von irgendwelchen Libraries übernommen, da muss ich auch kaum etwas per Hand schreiben.
Wo du etwas per Hand schreiben musst, können Fehler passieren. Immer.
Boah ey, Junge. Du hast echt nichts verstanden. Du bist der Realität gegenüber so ignorant, dass du dir einredest, C++ sei immer noch eine Erweiterung von C. Es ist mehr als das. Die Sprachen haben sich auseinanderentwickelt. In C musst du alles manuell aufräumen, also immer schön die Finger still halten, was das betrifft.C oder C++
So 'n Blödsinn. Wenn du eine OS-API wrappst, schreibst du dir eine kleine Klasse, die im Destruktor ein close(handle) oder etwas vergleichbares macht, das wars dann auch schon. Dieses Konzept lässt sich auf jede beliebige Resource übertragen. Der Aufwand ist minimal.mehr Code selber schreibt und kaum Libs benutzt muss man sich öfter selbst um irgendwelche Resourcen kümmern.
Das macht alles RAII für mich.Eine Datenbankverbindung habe ich auch schon lange nicht mehr per Hand zugemacht und wenn ich eine Datei benutze mache ich die nach dem Schreib- oder Lesevorgang meistens gleich wieder zu![]()
Tausende Fliegen können nicht irren, schon klar. Warum verweigerst du dich eigentlich der Realität und behauptest, man müsse so extrem viel mit Resourcen hantieren? In C++ ist der vom Java-Basher erwähnte unique_ptr die Lösung für die meisten Fälle. Meist sind Besitzverhältnisse so klar, dass man nicht lange darüber nachdenken muss, wo und wann irgendwas freigegeben werden muss.Wie gesagt, wenn sogar eher "Low-Level"-Sprachen wie D oder Go auf GC setzen kann das wohl nicht die falsche Richtung sein für Sprachen, mit denen man auf einer etwas höheren Ebene entwickelt.
Was der Java-Basher nicht weiß: Man kann mit unique_ptr auch jede beliebige Art von Resource verwalten, indem man einen sog. "Deleter" angibt, also eine Funktion, die bei Freigabe aufgerufen werden soll.
Weil du kein modernes C++ kennst. Modernes C++ besteht nicht aus irgendwelchen Zeigerfrickeleien, Resource-Frickeleien oder ähnliches, wie ich sie immer wieder von naiven Programmierern hören muss. Es gibt da so ein schönes Sprichwort, es fängt an mit: Wenn man keine Ahnung hat, ...Über Schönheit kann man sich natürlich streiten, aber für mich ist C++ die hässlichste Sprache, die ich bisher benutzt habe. Fortran (immerhin in einer modernen Form) war auch dabeiMan kann damit leben, aber ich bin doch ganz froh, wenn ich was anderes benutzen kann...
Richtig, Refcounts haben ihre Probleme. Aber 1) sind Besitzverhältnisse in 99,9% der Fälle so klar, dass ein GC die langsame, inperformante und unnötige Wahl ist und 2) Wird selbst der GC irgendwann feststellen, dass ein Objekt nicht mehr gebraucht wird und kann dann eine entsprechende Freigabemethode aufrufen.Doch, das ist ein Problem, wenn man keine Refcounts hatDie JVM verzichtet ja auch Refcounting und das hat ja auch gute Gründe.
Nicht unbedingt. Es hat sich in C++ die Konvention durchgesetzt, in Destruktoren nichts zu werfen. Wenn man über einen solchen Fehler informiert werden möchte, ruft man explizit eine .close() Methode auf, die etwas wirft oder ein Fehlerflag setzt.Dann muss man aber auch wissen, dass der komplette Code, der irgendwie vom Destruktor aufgerufen wird sich an die Regeln hält.
Das ist dann aber immer noch nur ein einziges mal, nämlich genau dann, wenn ich den Destruktor implementiere. Besser, als bei jeder Verwendung der Klasse einen try-catch Block um das close zu brauchen. Absolut lächerlich.Oder ich packe es auch wieder in try-catch ein, aber schön ist das dann auch nicht mehr...