(10.12.2013)sai schrieb: Java ist einfach so viel komfortabler als C++ und dabei fast so effizient. Bei C++ muss man an so viele Dinge denken (Destruktor, Kopierkonstruktor, Operatorfunktionen etc.) die einem Java abnimmt und sinnvoll festlegt.
Nun, Java mag darin einfacher sein, aber auch nur, weil die wichtigen Dinge halt fehlen. Dinge wie Copy-Konstruktor oder Zuweisungsoperator fehlen gleich ganz, die Destruktoren sind vollkommen unnütz, da sie 'vielleicht' aufgerufen werden. Was soll man denn damit anfangen? Idiome wie
RAII muss man dann mühselig mit exception handling jedes mal selbst erledigen.
Dinge wie Copy-Konstruktoren und Zuweisungsoperatoren generiert der Compiler bei 95% der Fälle automatisch, zumindest wenn man ordentliches C++ schreibt. Und sowas wie ein deep copy einer irrwitzig komplizierten Datenstruktur kriegt man einfach mal geschenkt.
(10.12.2013)sai schrieb: bei C++ stürzt bei Speicherlecks oder ähnlichem das Programm einfach ab ohne das man weiß was die Ursache ist.
Klingt nach jemand, der immer noch C-mit-Klassen programmiert, statt C++. Der häufigste gemachte Fehler beim C++ Lernen ist, dass die Leute erst C lernen. Und danach darauf bestehen, den alten C-Kram machen zu wollen. Gutes C++ macht einen großen Bogen um alles, was unter C normal war.
Zeiger zum Beispiel. Das war eine der irritierendsten Lektionen über C++, die ich mal von einem C++-Guru gelernt hab, auch wenn ich ihn anfangs für bescheuert hielt: Gutes C++ verwendet keine Pointer. Wenn du Pointer verwendest, machst du bereits was falsch. Und ohne Pointer auch keine Speicherlecks, oder obskure Abstürze.
(10.12.2013)sai schrieb: Und für mich das nervigste von allem: Ich muss Strings und die Ausgabefunktion erst einbinden
Es gibt halt nicht 'die' Strings, dafür herrscht hier Flexibilität, da die String-Bibliotheken nicht hart kodiert sind, sondern halt ebenfalls in C++ geschrieben. Boost's String-Bibliotheken definieren Strings z.B. als iterierbare Folge von Zeichen mit Anfang und Ende, wobei alles von ASCII über Unicode, Integers, Fließkomma, oder sonstige Objekte als 'Zeichen' völlig ok sind. Daher schlucken die String-Bibliotheken fast alles: Binäre Speicherblöcke, STL-Strings, Arrays von Zeichen, diverse Containerobjekte mit Zeichen, ganz egal. Und natürlich beliebige Teile von Strings, ohne Bedarf, diese erst in einen neuen String kopieren zu müssen.
Umgedreht treibt mich Java mit seinem schwachen Objektmodell in den Wahnsinn, z.B. den totalen Quark, den Java aus str1 == str2 macht, weil Strings halt nur in Form von Objektreferenzen existieren, und dennoch nicht mal mehr by-reference an eine Funktion übergeben werden können.