Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
Da müsste Unit** aUnits und new Unit*[2] stehen. Mit STL-Containern hat man allerdings dasselbe Problem. Die Speicherverwaltung von polymorphen Zeiger kann ein STL-Container nicht übernehmen. Gut geeignet wären für solche Fälle Boosts Pointer-Container (Smart-Pointer sind es im Allgemeinen nicht).Zitat von »"the[V«
oid"]
C-/C++-Quelltext
1 2 3 4 5 Unit* aUnits = new Unit[ 2 ]; aUnits[ 0 ] = new Soldier(); aUnits[ 1 ] = new Tank(); // ... delete [] aUnits;
Welche Datenstrukturen kommen denn ausser einem Baum noch in Frage? Du musst bedenken, dass der Standard gewisse Anforderungen an die Zeitkomplexität verschiedener Operationen stellt. Sortiert muss der Container ohnehin sein.Zitat von »"the[V«
oid"]Wie kommst du jetzt bei std::map auf Baum, Nox?
Vermutlich wird es in den meisten Fällen als Baum implementiert sein (zwecks Sortierung), aber nach Außen hin ist ein Dictionary.
Zitat von »"Nexus"«
Da müsste Unit** aUnits und new Unit*[2] stehen. Mit STL-Containern hat man allerdings dasselbe Problem. Die Speicherverwaltung von polymorphen Zeiger kann ein STL-Container nicht übernehmen. Gut geeignet wären für solche Fälle Boosts Pointer-Container (Smart-Pointer sind es im Allgemeinen nicht).Zitat von »"the[V«
oid"]
C-/C++-Quelltext
1 2 3 4 5 Unit* aUnits = new Unit[ 2 ]; aUnits[ 0 ] = new Soldier(); aUnits[ 1 ] = new Tank(); // ... delete [] aUnits;
Zitat von »"Nexus"«
Dictionary, assoziatives Array, Schlüssel-Wert-Zuordnungstabelle oder Map sind semantische Begriffe, die nicht an eine feste Implementierung gebunden sind. Man könnte ein assoziatives Array genauso unter Verwendung von std::vector implementieren, das kann sogar sinnvoll sein.
Ich sagte, der Container könne dir die entsprechende Speicherverwaltung nicht abnehmen. Sofern du also normale Zeiger speicherst, bist du gezwungen, alle Objekte selbst freizugeben, und nimmst einige weitere Nachteile in Kauf. Manuelle Speicherverwaltung sollte jedoch auf ein Minimum reduziert werden, wenn robuster und wartbarer Code angestrebt wird (das heisst nicht, dass man nie besitzende Zeiger in STL-Containern speichern sollte, aber in den meisten Fällen gibts eben bessere Lösungen).Zitat von »"the[V«
oid"]Ja da muss natürlich ein Doppelpointer hin. Was genau meinst du mit einer Speicherverwaltung von polymorhen Zeigern? Selbstverständlich kannst du Zeiger auf polymorphe Objekte mit einem STL-Container verwalten O.o Mache ich tagtäglich, warum sollte das nicht gehen?
Nun ja, Nox hat die Datenstrukturen aufgezählt und du hast eingewendet, dass Dictionary zu std::map besser passe als Baum, was in dem Kontext eben nicht der Fall ist.Zitat von »"the[V«
oid"]Genau das habe ich doch gesagt O.o
idontknow
unregistriert
Zitat von »"NachoMan"«
seit wann ist std::vector eine verkettete liste?
Zitat von »"idontknow"«
Zitat von »"NachoMan"«
seit wann ist std::vector eine verkettete liste?
Ich weiß ehrlich gesagt nich was vector ist, ob aray liste oder what else is mir egal. Ich weiß was es macht und wie ich es benutze
idontknow
unregistriert
Community-Fossil
Zitat
std::vector reserviert den speicher auf ein mal. der speicherbereich ist zusammenhängend und man kann zeigerarithmatik verwenden.
Werbeanzeige