Xin hat geschrieben:Ich hätte auch new und delete[] benutzt, aber faktisch ist das das gleiche. Der einzige Unterschied ist, dass die Programmiersprache Dir das Casting abnimmt.
Ich würde halt schauen, dass ich in meinem Code immer einheitlich bleibe, außer es gibt einen Grund vom "Standard" abzuweichen.
Xin hat geschrieben:Hätte er C benutzt, so hätte er #include <stdio.h> geschrieben. Die cstdlib gehört zu Standard-C++.
Ja schon, ich habe eigentlich das gleiche gemeint wie im vorherigen Punkt. Warum soll ich eine C-Funktion verwenden in C++, wenn es dafür eine geeignetere (in meinen Augen, da typsicherere) C++ Funktion gibt?
Xin hat geschrieben:Man hätte auch gleich std::vector< std::vector< T > > als Member nehmen können. ^^
Soweit ich das verstanden habe, will Glocke einen lightweight Wrapper um ein Array, das ihm etwas Verwaltungsaufwand abnimmt.
In meinen Augen spricht jedoch nichts dagegen in einer lightweight Array2D Klasse eine lightweight Array1D Klasse zu verwenden.
Xin hat geschrieben:Programmierung ist Handwerk. Es gibt nie nur eine richtige Lösung.
Ich wollte auch gar nicht sagen, dass meine Vorschläge besser sind, Glockes Variante ist sehr wahrscheinlich performanter. Sollte nur ein Gedankenanstoß sein.
Xin hat geschrieben:Man darf zum Beispiel gerne mal antesten, ob ich
t * values;
nicht reicht, wenn man get(x,y) so implementiert, dass man auf values[ y * width + x ] zugreift. Das könnte bei modernen CPUs schneller sein, als zweimal zu dereferenzieren.
Die Lösung find ich persönlich fast noch besser, vorallem weil man für die Verwaltung sowieso einen Wrapper drumrum hat. Und im Prinzip ist ein int[x][y] auch nichts anderes als ein int[x*y].
Außerdem könnte man dann vermutlich leichter die Array2D von der Array1D Klasse ableiten bzw. ein gemeinsames Interface schaffen, wenn man denn sowas machen will.

"Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why."