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

Anonymous

unregistriert

1

27.09.2008, 17:50

[Erledigt] New und Delete?

Hi, könnte mir jemand erklären, wieso man New und Delete gebraucht? Ich verstehs nicht.

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

2

27.09.2008, 17:52

Man braucht new um Speicher zu reservieren und delete um selbigen wieder frei zu geben.
@D13_Dreinig

Errschaffer

Alter Hase

Beiträge: 865

Wohnort: Frankfurt

  • Private Nachricht senden

3

27.09.2008, 17:55

Z.b du willst ein OnlineRollenspiel Porgrammieren dann weisst du ja nie wieviele Spieler das gerade Spielen.
Jetzt könntest du natürlich 2000 Instanzen erzeugen aber wer macht das schon ? :lol:

Dann kann man sich dafür halt Speicher reservieren.

Hoffe ich habe jetzt kein unsinn erzählt bin selber gerade bei dem Kapitel ^^

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

4

27.09.2008, 18:12

Zitat von »"Errschaffer"«

Z.b du willst ein OnlineRollenspiel Porgrammieren dann wiesst du ja nie wieviele Spieler das gerade Spielen.
Jetzt könntest du natürlich 2000 Instanzen erzeugen aber wer macht das schon ? :lol:

Dann kann man sich dafür halt Speicher reservieren.

Hoffe ich habe jetzt kein unsinn erzählt bin selber gerade bei dem Kapitel ^^


nö war vollkommen korrekt^^

Toa

Alter Hase

Beiträge: 944

Beruf: Research associate

  • Private Nachricht senden

5

27.09.2008, 19:00

mit new kannst du speicher auf dem Heap reservieren wie oben schon erwähnt. Der Heap ist ein Speicherbereich der erst am Ende des Programms geleert wird sprich wenn du dein Programm beendest und kein Prozess bzw Thread mehr davon vorhanden ist.

Steven77

Alter Hase

Beiträge: 515

Wohnort: Münster - Gievenbeach

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

6

28.09.2008, 15:36

Zitat von »"Toa"«

mit new kannst du speicher auf dem Heap reservieren wie oben schon erwähnt. Der Heap ist ein Speicherbereich der erst am Ende des Programms geleert wird sprich wenn du dein Programm beendest und kein Prozess bzw Thread mehr davon vorhanden ist.


Na, genau dafür gibt es doch delete, um auf dem Heap reservierten Speicher "manuell" wieder freizugeben. Es wäre auch unsauber, den Speicher nicht per delete freizugeben, sondern darauf zu hoffen, dass das Betriebssystem die Drecksarbeit erledigt.
Kommen Sie nie mit einem Schwert zu einer Schießerei.

Toa

Alter Hase

Beiträge: 944

Beruf: Research associate

  • Private Nachricht senden

7

28.09.2008, 17:51

Zitat von »"Steven77"«

Zitat von »"Toa"«

mit new kannst du speicher auf dem Heap reservieren wie oben schon erwähnt. Der Heap ist ein Speicherbereich der erst am Ende des Programms geleert wird sprich wenn du dein Programm beendest und kein Prozess bzw Thread mehr davon vorhanden ist.


Na, genau dafür gibt es doch delete, um auf dem Heap reservierten Speicher "manuell" wieder freizugeben. Es wäre auch unsauber, den Speicher nicht per delete freizugeben, sondern darauf zu hoffen, dass das Betriebssystem die Drecksarbeit erledigt.


Ja ich wollte mit dem "Der Heap wird nach beenden des Programms geleert" nur verdeutlichen um was für eine Art Speicher es sich handelt! ... damit der unterschied zwischen Stack und Heap deutlich wird ..

Faule Socke

Community-Fossil

Beiträge: 1 915

Wohnort: Schreibtischstuhl

  • Private Nachricht senden

8

30.09.2008, 01:00

Zitat von »"Steven77"«

Na, genau dafür gibt es doch delete, um auf dem Heap reservierten Speicher "manuell" wieder freizugeben. Es wäre auch unsauber, den Speicher nicht per delete freizugeben, sondern darauf zu hoffen, dass das Betriebssystem die Drecksarbeit erledigt.


Es wäre nicht nur unsauber, sondern auch sehr Fehleranfällig, da das System den Speicher zwar wieder freigibt für andere Anwendungen (Windows überschreibt wegen der Sicherheit sogar noch mit 0en), aber die Destruktoren kann das System natürlich nicht aufrufen.

So mal was allgemeines zum Heap:
Wenn du bisher einen String gespeichert hast, hast du das vermutlich so gemacht:

C-/C++-Quelltext

1
2
char string[128];
cin >> string;


Was passiert aber, wenn der benutzer mehr wie 128 zeichen eingeben will? Pech, denn du kannst dein Array nicht mehr vergrößern und die größe (das in []) muss const sein, dass bedeutet, du kannst sie nicht einfach z.b. vom Benutzer abfragen. Deshalb nimmt man den Heap für solche sachen. Du könntest zum Beispiel zuerst den Benutzer fragen, wie viele Zeichen er denn eingeben möchte, rechnest noch sicherheitshalber 10 drauf und reservierst dann dein speicher mit new. Du erhälst einen pointer auf den speicher.

Mal ganz andere Situation:
Du programmierst ein Ego-Shooter und möchtest nun die Waffen laden (stell dir der einfachheit halber einfach jede waffe als ein element in nem int-Array vor). So du hast also ganz viele ints in einer Datei, weisst aber nicht wie viele. Du willst das ganze aber in nem Array haben, kennst aber wie gesagt die größe net. So nun könntest du zum Beispiel deine Datei öffnen und die ints zählen (wie du das tust, steht hier mal außen vor^^), dann mit new ein Array anlegen und deine ints da rein laden.

Ich hoffe, jetzt kennst du ein paar verwendungszwecke und vergiss bitte nie, nie, nie, nie, nieniemals delete aufzurufen, wenn du immer dran denkst sparst du dir ne menge seltsames verhalten.

Socke

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

9

30.09.2008, 08:57

Zitat

Ich hoffe, jetzt kennst du ein paar verwendungszwecke und vergiss bitte nie, nie, nie, nie, nieniemals delete aufzurufen, wenn du immer dran denkst sparst du dir ne menge seltsames verhalten.

Wenn wir schon bei Ratschlägen sind. Warum hat noch niemand als Alternative zu ( "bösen" ) Arrays std::vector genannt?.
Mit dem ist ist die Benutzung eines Arrayähnlichen Objektes nämlich trivial. Und besonders für Anfänger geeignet. ;)

Zitat

unterschied zwischen Stack und Heap deutlich wird

Hmm. Das, was du da meinst ist der Unterschied von dynamischer und automatischer Speicherverwaltung. Es ist auch möglich dynamische Objekte auf dem Stack zu haben und vor allem ist es auch möglich automatisch verwaltete Objekte auf dem Heap zu haben. (Vor allem ist es C++ egal, ob automatische oder dynamische Speicherverwaltung mittels eines Stackes, Heapes, oder sonst was geschieht.)

10

01.10.2008, 19:29

Zitat von »"drakon"«

Wenn wir schon bei Ratschlägen sind. Warum hat noch niemand als Alternative zu ( "bösen" ) Arrays std::vector genannt?.
Mit dem ist ist die Benutzung eines Arrayähnlichen Objektes nämlich trivial. Und besonders für Anfänger geeignet. ;)

Ich wäre schon dafür, einem Anfänger erst mal die grundlagen, zu denen Zeiger und Arrays nunmal gehören, beizubringen, bevor man ihm mit STL-Objekten kommt ;)

Werbeanzeige