Objekte dynamisch erzeugen
-
Hallo zusammen,
ich habe leichte Schwierigkeiten beim Erzeugen von Objekten:
vector<DeskIcon*> iconVector;
DeskIcon *iconPointer;iconPointer = new DeskIcon(1);
iconVector.push_back(iconPointer);
iconPointer = new DeskIcon(1);
iconVector.push_back(iconPointer);
iconPointer = new DeskIcon(2);
iconVector.push_back(iconPointer);
iconPointer = new DeskIcon(2);
iconVector.push_back(iconPointer);Hiernach befinden sich zwar 4 Pointer in dem Vektor, allerdings haben die alle den Wert "2" als Parameter, wenn ich diesen auslese.
Was mache ich falsch?gruß
Alex
-
filth schrieb:
Was mache ich falsch?
Wissen wir nicht, ohne DeskIcon und deine Auslesemethode zu kennen.
-
Hi,
DeskIcon.cpp :
int type; DeskIcon::DeskIcon(int i) { type = i; } int DeskIcon::getType() { return type; }Auslesen:
for(int i=0; i<iconVector.size();i++) { cout << "Icon type: " << iconVector.at(i)->getType() << endl; cout << "I: " << i << "\n"; }Gruß
Alex
-
type ist nicht etwa global, oder?
-
drakon schrieb:
type ist nicht etwa global, oder?
Das war es. Jetzt gehts!
Aber der Zusammenhang ist mir nicht ganz klar. Auch wenn type vorher global war, es ist doch an das jeweilige Objekt gebunden oder nicht?
-
filth schrieb:
drakon schrieb:
type ist nicht etwa global, oder?
Das war es. Jetzt gehts!
Aber der Zusammenhang ist mir nicht ganz klar. Auch wenn type vorher global war, es ist doch an das jeweilige Objekt gebunden oder nicht?Nein. Das ist ja gerade das böse an globalen vars. So hatte type einfach den Wert, den er zuletzt hatte und das war hald 2. Und bei der Ausgabe hast du einfach auf das globale Objekt zugegriffen und das war hald immernoch 2.
-
müsstest du nicht "nur" die addresse übergeben?
also
iconVector.push_back(*iconPointer); // bzw &iconpointerweil du hast ja den vector auch mit pointern gemacht
vector<DeskIcon*> iconVector;
-
Er übergibt ja auch Pointer. Die eine temporäre Variable kann man sich da auch noch sparen.
iconVector.push_back( new DeskIcon(1)); iconVector.push_back( new DeskIcon(1)); iconVector.push_back( new DeskIcon(2)); iconVector.push_back( new DeskIcon(2));
-
oder so

-
Bei der new-Variante musst du aber auch schauen, dass du beim Aufruf von
erase(),pop_back()oderclear()oder dem automatischen Destruktor des Vektors auch die einzelnen Elemente sauber mitdeletelöschst.