Eben nicht! Man hätte viel mehr Rumgebastel und die Datenstruktur wäre komplizierter. So kann man z.B. memcpy verwenden und muß nicht überall ein Array aus Pointern vewalten… arghl!
Wie schon erwähnt, wäre es auch nicht performant.
EDIT: std::vector: Da hätte man das gleiche Problem und zusätzlich noch die Verwaltungsdaten für die vector Objekte → bad idea
Prinzipiell ist es ja in dem Fall ja etwas in der Art. Das Problem ist aber dennoch, dass Templates nicht so 100%ig in die standard Makefilekonventionen passen.
wo wir schon dabei sind:
Der Return-Typ von Matrix::operator= ([m]“Matrix operator=(const Matrix &other);”[/m]) ist ungewoehnlich,
normalerweise wuerde man “Matrix &” zurueckgeben (sag ich…).
Den Cpyctor aufzurufen scheint mir aber kein Vorteil zu sein^^
Ohne Optimierung wuerde der Operator (nach der eigentlichen Zuweisung an this) noch eine Matrix-Instanz als Rueckgabewert erzeugen,
die evtl gar nicht gebraucht wird.
Thx. Was ist mit Fehlerbehandlung gemeint? Ganz klassisch wie in C: Fehlermeldung ausgeben und abbrechen oder irgendwas mit Exceptions (gibts sowas in C++?) ?
-Also assert() reicht aus und ist schnell hingeschrieben
-etwa in der Art if (Fehler) { std::cerr << “fehler”; exit(0); } ist auch ok
-Exception werfen ist eigentlich konzeptionell das Beste, aber es wurde nirgends besprochen
Hab ez nich alle Beiträge gelesen, aber falls sich jemand wundert warum er mit der main aus diesem Thread und valgrind Speicherlecks hat:
Die main erzeugt 15 Objekte mit new, deleted sie aber nicht mehr.
Also wer 15 not-freed blocks hat, hat kein Problem, alles drüber is nix gut
Wozu das denn? Das geht doch auch alles auf dem Stack. Am besten RAII lernen:
C++ != C, nix malloc, nix einfach so Speicher überall rumfliegen lassen.
$ valgrind ./A1
[...]
==9495== HEAP SUMMARY:
==9495== in use at exit: 0 bytes in 0 blocks
==9495== total heap usage: 11 allocs, 11 frees, 188 bytes allocated
==9495==
==9495== All heap blocks were freed -- no leaks are possible
==9495==
==9495== For counts of detected and suppressed errors, rerun with: -v
==9495== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 19 from 8)
EDIT:
Sowas hier ist Mist (aus main.cpp von oben):