Bei mir macht Speicherbeschaffung vielleicht 1/3 der Ressourcen aus. Dateien und andere Objekte (z.B. Shader, Sockets) sind da nicht zu vernachlässigen.
Nein, ein Destruktor wird automatisch, immer und exception-sicher aufgerufen. Das ist mit einer Methode nicht zu vergleichen.
Eigentlich.. schon. Welche Probleme siehst du bei Destruktoren?
Ob das performant ist will ich hier mal nicht diskutieren, aber der Teil der für den Speicher zuständig ist, ist elegant, ohne Frage. Man muss sich da einfach nicht mehr drum kümmern. Was das für Nebeneffekte bei der Speicherorganisation hat ignoriere ich auch mal. Aber ein Konzept das als Ressourcen nur Speicherbeschaffung in Blick nimmt und bei dem man ansonsten alles manuell aufrufen muss, halte ich für ziemlich halbgar.
Ich finde es nur lustig wie ich mich immer vor Java gesträubt habe. Als ich C gelernt habe, wollte ich primär wissen wie so ein Computer eigentlich funktioniert, da war Java natürlich die falsche Wahl. Als ich dann C++ konnte hätte ich auch öfter mal zu Java schauen können, aber irgendwie haben dann Templates gefehlt und dank meiner Nähe zu C hatte ich da auch keine große Motivation. Jetzt bin ich quasi gezwungen mit Java zu arbeiten (Android) und bin sogar guter Dinge an diese ominöse Sprache gegangen, die einem alles so leicht macht, bei der man sich um nichts mehr kümmern muss und sich ganz auf sein Programm konzentrieren kann. Offen gesagt bin ich ziemlich enttäuscht, und ich kann überhaupt nicht mehr nachvollziehen warum jemand behaupten sollte Java sei sicherer als C++. Gut, bei Java liegen Rücksprungadresse und Daten nicht hintereinander, also Bufferoverflows sind weniger problematisch. Aber sonst? Ressourcen müssen mit der Ausnahme von Speicher manuell freigegeben werden, Referenzen müssen nicht initialisiert sein, keine Operatorüberladungen. Irgendwie hatte ich mehr erwartet. So fühlt sich das Programmieren fast wieder an wie in C, außer dass man überall komische try/catch Blöcke bauen muss.