Seite 1 von 1

Shapereader

Verfasst: 5. Dez 2011 13:51
von studypad
Hallo,
Ich habe folgende Situation:

Code: Alles auswählen

std::Vector<FinitieShape*> veclist;
Nun will ich ein Triangle t dahinein bringen.

Code: Alles auswählen

veclist.push_back(&t)
oder

Code: Alles auswählen

veclist.push_back(*t)
? Ich bin etwas verwirrt und leider kann ich es schwer testen gerade.

Re: Shapereader

Verfasst: 5. Dez 2011 14:22
von dschneid
Der vector speichert Pointer auf FiniteShapes. Deswegen brauchst du von Triangle t die Adresse, also fügst du &t in den vector ein.

Re: Shapereader

Verfasst: 5. Dez 2011 16:50
von simon.r
Führt das nicht zu einem Fehler, wenn außerhalb der Funktion wieder auf den Vectorinhalt zugegriffen wird? Immerhin scheint t auf dem Stack zu liegen und wird daher gelöscht, wenn die Methode verlassen wird.

Re: Shapereader

Verfasst: 5. Dez 2011 17:24
von Drno
Man würde in Shapereader auch intern mit FiniteShape-Pointern arbeiten und dort Speicher per new anfordern. Entsprechend findet man in pr3.cpp am Ende die Speicherfreigabe per delete.
Mit Scoping und Pointern hast du schon recht, da muss man immer sehr aufpassen.

Re: Shapereader

Verfasst: 11. Dez 2011 11:13
von charfi90
Hallo,

eher eine Frage dazu, müsste man da die einzelnene finite shapes auch per new erzeugen ? also nicht nur der vector selbst - oder?

Gruss

Re: Shapereader

Verfasst: 11. Dez 2011 23:09
von kbraden
Den zurueckgegebenen vector musst du afaik nicht als pointer halten, also auch nicht per new erzeugen - weil er ja als Objekt zurueckgegeben wird.
Wichtig ist afaik dass die Shapes drinne per FiniteShape * foo = new Triange(...); erzeugt werden, und nicht FinitShape foo(...) und dann per &foo in den vector.