Dynamische Speicherreservierung - Array von Pointer auf Objekt
lima-city → Forum → Programmiersprachen → C/C++ und D
adresse
array
belegte speicher
code
dank
deklaration
direktem zugriff
ermitteln
frage
hauptproblem
hilfestellung
http
listen
machen
objekt
pointer
problem
url
vektor
vergessen
-
So ich stehe nun schon längere Zeit vor einem Problem und weiss nicht so recht wie es zu lösen ist...
Ich habe ein Array, welches mehrer Objekte enthalten soll, diese sollen dynamisch erweitert werden können. Da ich jedoch nicht immer das ganze Objekt kopieren möchte, wäre es viel praktischer, wenn ich ein Array von Pointer habe, welche auf die Objekte zeigen. Wenn ich jetzt ein neues Objekt möchte, dann kopiere ich die Einträge des Array, lösche dieses und erstellen ein neues, welches um eins grösser ist, und kopiere die Adressen der Objekte wieder zurück.
Nun ist meine Frage wie macht man das in C++, bzw. gibt es Alternativen mit der STL?
Noch als Hinweis, ich muss direkt auf das Objekt zugreifen können, also kommen Listen nicht in frage.
Hier noch eine Grafik zum verdeutlichen:
http://my-gate.net/public/array.png
Danke im voraus für jede Hilfestellung!
mfg Lukas -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
STL Vector
Google gibt dazu sehr viele und (teils) sehr gute Tutorials aus. Es ist auch nicht sonderlich kompliziert.
Du dürftest keine Probleme damit haben.
Die Elemente können per Iterationen und direktem Zugriff ausgelesen werden usw. usf.
Wie gesagt: Google gibt dir alles was du brauchst und mit Den STL Vectoren kann man - meiner Erfahrung nach - sehr gut arbeiten. -
STL Vector
Danke für die Hilfe.
Ja, Vectors kenne ich auch wie sie funktionieren usw. jedoch bleibt immer noch die Frage der deklaration...
Das ist ja auch eigentlich mein Hauptproblem.
Ist das so korrekt?
vector<*CObject> objects;
CObject temp = new CObject;
objects.push_back(temp);
Oder sollte das anderes angegangen werden?
mfg Lukas
Beitrag zuletzt geändert: 29.12.2009 15:02:07 von klasset -
vector <CObject*> objects; vector <CObject*>::iterator objectsIt; // Die Adresse von einem neuen CObject zum Vektor hinzufügen objects.push_back(new CObject); objects.push_back(new CObject); // Alle Objekte durchgehen und löschen for (objectsIt = objects.begin(); objectsIt != objects.end(); objectsIt++) { // Der belegte Speicher von den Objekten muss irgendwo wieder freigegeben // werden delete *objectsIt; // Pointer sicherheitshalber auf 0 setzen, Grund ist klar! *objectsIt = 0; } // Vektor säubern objects.clear();
Den Clean Up solltest du niemals vergessen! Sonst kann es zu Speicherlecks kommen.
Die Adresse von einem temporären Objekt kannst du so ermitteln:
CObject tempObject; CObject *tempObjectAddress = &tempObject;
Natürlich auch nicht vergessen:
#include <vector> using namespace std;
Grüße -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage