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

1

12.03.2011, 17:25

Frage zu Listing 7.9

Hallo im Kapitel 7 wird ja unter anderem new und delete angesprochen.
So ganz habe ich das aber noch nicht verstanden, warum ich diese nun bei Listing 7.9 verwenden muss.
Und vorallen, wenn ich bei

C-/C++-Quelltext

1
 pSpielerliste = new CSpieler[AnzahlSpieler];


das new weglasse wird folgender Error ausgegeben: Ungültige Verwendung dieses Typs als Ausdruck.
Dabei will ich doch das pSpielerliste (ist ein Vektor) die Adresse des Arrays von der Klasse CSpieler bekommt oder?
Und das dieses Array jetzt erzeugt werden soll, mithilfe der integer Variable AnzahlSpieler


EDIT:
Ich glaube ich hab es selber herausgefunden.
new reserviert mir einen Speicherbereich und legt das Array in diesem Bereich an und gibt mir dann die Adresse auf den Zeiger.
Ohne das new hab ich nur eine Ansprache auf CSpieler[] also auf die Klasse CSpieler.
Eine Klasse selber ist ja kein Array o.ä. und deswegen ist das auch eine ungültige Verwendung.

Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von »easyMaxi« (12.03.2011, 18:13)


2

12.03.2011, 22:14

So ungefähr...

Mit new reservierst du dynamisch, also zur Laufzeit, Speicher für ein Objekt. Die Größe deines Arrays müsste, wenn du es auf dem Stack anlegst, schon zur Kompilierzeit feststehen. Wenn du dein Array aber auf dem Heap anlegst, dann kannst du dies auch zur Laufzeit tun, die Größe des Arrays muss also vorher noch nicht feststehen. Dafür benutzt man das Schlüsselwort new.

Nicht vergessen: Was mit new reserviert / angelegt wurde muss mit delete ( bzw. bei einem Array delete [] )wieder freigegeben werden.

Gruß
SaRu_

3

12.03.2011, 22:15

ok ... aber ich reserviere hier nicht nur sondern erschaffe damit auch das Array oder?

4

12.03.2011, 22:16

Ja tust du!

Gruß
SaRu_

5

12.03.2011, 22:17

Ok. Danke.

So im nachhinein betrachtet macht das alles Sinn :D

Werbeanzeige