C
freddixx schrieb:
Ooookay, dann bearbeite ich mal meinen Quelltext. Ich werde iterativ vorgehen und schauen, wann es wieviel langsamer wird. Im Moment habe ich:
Voxel* v = new Voxel(d1,d2,d3, greyValue);
vgraph[d1][d2][d3] = v;
Daraus mache ich:
voxelGraph.vgraph[d1][d2][d3] = &Voxel(d1,d2,d3, greyValue);
Das ist ein Schritt in die falsche Richtung, wenn es sich überhaupt übersetzen lässt. Voxel(...) erzeugt eine temporäre Variable, die am Ende der Anweisung wieder gelöscht wird - damit speicherst du einen Zeiger auf Datenmüll im Graph.
typedef vector<Voxel*> voxVec1D;
typedef vector<voxVec1D> voxVec2D;
typedef vector<voxVec2D> voxVec3D;
zu:
typedef vector<Voxel> voxVec1D;
typedef vector<voxVec1D> voxVec2D;
typedef vector<voxVec2D> voxVec3D;
Aber dann müsste ich richtig im Code wursteln Aber bevor ich das jetzt mache: Im Moment hätte ich ja noch den 3D-Vector mit Adressen - da geht eine "Kopie" auf einen anderen Vector recht schnell, bzw, sich einen Zeiger auf ein Objekt dieses Vectors zu holen.
Eine Lösung wäre es, dir einen Container zu bauen, in dem alle deine Voxel untergebracht sind. Im weiteren Verlauf des Programms kannst du dann Zeiger in diesen Container verwenden.
@Minority Report: Die Containerklassen arbeiten intern auch wieder mit new/delete (oder einer alternativen Methode zur Head-Verwaltung, die von std::allocator<> vorgegeben wird), nur siehst du als Anwender davon nichts mehr.