Pointerproblem:
-
Hallo Forum,
ich möchte ein Autoobjekt erstellen, die Eigenschaft Nummer setzen und dann das Auto in einen Vektor schreiben:
... Auto *oAuto; char *tmp=0; oAuto = new Auto; //oSchrottplatz->AddAuto(oAuto); // <- Hier kommt das Auto auf dem Schrottplatz nicht an. Warum? // Nummer setzen: tmp = (char *)malloc(10); sprintf(tmp, "Nbr %5d", i); oAuto->Number = tmp; oSchrottplatz->AddAuto(oDongle); // Hier kommt das Auto mit richtiger Nummer an. }; int Schrottplatz::AddAuto(Auto *oAuto) { m_Autos.push_back(*oAuto); return 0; }Ich wollte es eigentlich so wie in der auskommentierten Zeile machen. Das Autoobjekt hat die Adresse xx5758 wenn der New Operator abgearbeitet ist. Diese Addresse wird auch an erster Stelle von m_Autos geschrieben. Die gesetzte Nummer erscheint aber nicht in m_Autos[]. Wird bei push_back eine Kopie gemacht? Wenn ich zuerst die Nummer dem Auto hinzufüge und dann das Auto auf den Schrottplatz werfen erscheint die Nummer ach in m_Autos[1].
Moser
-
Dieser Thread wurde von Moderator/in TactX aus dem Forum ANSI C in das Forum C++ verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Moser schrieb:
Wird bei push_back eine Kopie gemacht?
ob die methode push_back ein kopie macht oder was sie überhaupt macht kann ich hier leider nicht rauslesen, aber möglicherweise soll ihr ein normaler Zeiger übergeben werden, also
m_Autos.push_back(oAuto);anstatt
m_Autos.push_back(*oAuto);
-
push_back macht eine Kopie des übergebenen Objektes.
Auto *oAuto = new Auto; oSchrottplatz->AddAuto(oAuto); // hier wird der Pointer hineinkopiert int Schrottplatz::AddAuto(Auto *oAuto) { m_Autos.push_back(*oAuto); // Hier wird das Objekt hineinkopiert return 0; }Wie sieht denn die Deklaration von m_Auto aus. Ich hoffe mal Number ist kein char*.
-
Das wichtigste hatte ich vergessen. m_Auto ist ein Vektor. Also:
vector<Auto> m_Autos;@Braunstein: Des gesamten Objektes? Oder nur des Pointers?
-
push_back kopiert das Objekt mit dessen Copy-Ctor - wenn du keinen definiert hast, bedeutet das eine flache Kopie (sprich: Zeiger werden nur umgebogen).
Wie ist eigentlich deine Auto-Klasse definiert?