Shapereader

studypad
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 158
Registriert: 30. Mär 2011 11:46

Shapereader

Beitrag 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.

dschneid
Sonntagsinformatiker
Sonntagsinformatiker
Beiträge: 271
Registriert: 14. Dez 2009 00:56

Re: Shapereader

Beitrag 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.

simon.r
Mausschubser
Mausschubser
Beiträge: 59
Registriert: 4. Okt 2010 16:13

Re: Shapereader

Beitrag 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.

Drno
Sonntagsinformatiker
Sonntagsinformatiker
Beiträge: 236
Registriert: 10. Feb 2005 20:16

Re: Shapereader

Beitrag 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.
Programming today is a race between software engineers striving to build bigger and better idiot proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning.

charfi90
Mausschubser
Mausschubser
Beiträge: 61
Registriert: 8. Sep 2010 15:40

Re: Shapereader

Beitrag 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

kbraden
Mausschubser
Mausschubser
Beiträge: 98
Registriert: 15. Okt 2010 20:35

Re: Shapereader

Beitrag 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.

Antworten

Zurück zu „Archiv“