Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

11

09.10.2012, 19:20

/

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »E333« (02.09.2021, 04:06)


NukeNoob

Frischling

  • »NukeNoob« ist der Autor dieses Themas

Beiträge: 48

Beruf: Student

  • Private Nachricht senden

12

09.10.2012, 20:02

Hallo E122!
Danke für die schnelle Antwort. Nun habe ich das Problem, dass ich keinen Vektor vom Typ <int> sondern <CAdressbuch*> habe ... ich habe keine Ahnung wie ich das benutzen muss, wenn ich Instanzen von Klassen im Vektor habe ...

LG
NukeNoob

13

09.10.2012, 20:27

/

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »E333« (02.09.2021, 04:06)


dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

14

09.10.2012, 20:59

Dazu vielleicht ein Paar Anmerkungen:

1) Wenn du Objekte mit new allokierst, solltest du Smartpointer verwenden, die sich darum kümmern, die Objekte in jedem Fall automatisch wieder freizugeben. Hier bietet sich wohl std::unique_ptr an. Du kannst auch einen std::vector<std::unique_ptr<Blub>> machen.

2) Wenn der gesuchte Pointer nicht im vector enthalten ist, liefert std::find() last zurück und der berechnete Index wird dich nicht sehr glücklich machen.

NukeNoob

Frischling

  • »NukeNoob« ist der Autor dieses Themas

Beiträge: 48

Beruf: Student

  • Private Nachricht senden

15

09.10.2012, 22:45

Hallo dot!
Danke für deinen Tipp. Ich weiß nicht genau, was du mit deinen Smartpointern meinst. Fest steht aber, dass ich das Ganze jetzt hinbekommen haben und es Fehlerfrei läuft. Ich werde mich jetzt nach und nach darum kümmern, das Programm zu optimieren.

LG
NukeNoob

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

16

09.10.2012, 22:49

Nunja, Objekte in C++ haben eine sehr nette Eigenschaft, nämlich dass sie eine genau definierte Lebensdauer haben. Wenn ein Objekt seinen Gültigkeitsbereich verlässt, wird es automatisch zerstört und sein Destruktor aufgerufen. Du kannst dir ja mal überlegen, wie man diese Erkenntnis auf new und delete anwenden könnte... ;)

NukeNoob

Frischling

  • »NukeNoob« ist der Autor dieses Themas

Beiträge: 48

Beruf: Student

  • Private Nachricht senden

17

10.10.2012, 21:12

Damit meinst du, dass ich einen Eintrag loeschen kann, indem ich (*i) für einen bestimmten Eintrag einfach irgendnen Speicherbreich zuweise, der dann den gueltigen Bereich verlässt und verschwindet?

LG
NukeNoob

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

18

10.10.2012, 22:43

Stell dir vor, du hast ein normales C++ Objekt (Eine Instanz einer Klasse), welches nicht viel mehr macht, als einen Zeiger zu kapseln. Es speichert einen Zeiger und kann das Objekt auf welches der Zeiger zeigt zurück geben. Das Objekt holt sich im Konstruktor Speicher und gibt ihn im Destruktor wieder frei. Das passiert mit new bzw delete. Den Vorteil den du dadurch hast, ist dass du selbst nicht mehr darauf achten musst delete aufzurufen. Das ganze nennt sich dann smartpointer. Es ist quasi ein Zeiger, welcher etwas eleganter ist.
Hier kannst du mal gucken. Sieht ganz gut aus. Hab es aber selbst nicht gelesen. Ansonsten kannst du das ganze auch mal selbst bei Google suchen. Du kannst dir natürlich selbst so eine Klasse schreiben, wobei es dabei ein paar Sachen gibt die du beachten solltest. Am einfachsten wäre es, wenn du dich ein bisschen zu dem ganzen Thema informierst und dann guckst was es schon fertig gibt. STL kennst du ja bereits, da du Container wie Vector, List, etc verwendest. Boost wäre vielleicht noch ein weiteres Stichwort welches dir im verlaufe deiner Entwicklerzeit Arbeit ersparen kann.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

NukeNoob

Frischling

  • »NukeNoob« ist der Autor dieses Themas

Beiträge: 48

Beruf: Student

  • Private Nachricht senden

19

13.10.2012, 11:23

Hallo Schorsch,
danke für deinen Beitrag. Ich muss mir Eines nach dem Anderen erarbeiten ... es gibt so viel Verschiedenes. Ich wollte mit dem Projekt was ich gerade mache ein wenig meine Kenntnisse bezüglich <vector>, <list>, <map>, usw. verfeinern, weil die meisten Fragen erst bei der Anwendung auftauchen.

Trotzdem danke für deinen Tipp!

LG
NukeNoob

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

20

13.10.2012, 11:56

http://stackoverflow.com/questions/10699…ontainer-in-c11 Die Grafik dort ist ganz gut als Hilfestellung. Wenn du einen Container suchst, gehst du die Pfade lang, guckst was du benötigst und hast am Ende den Container den du gesucht hast.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

Werbeanzeige