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

birdfreeyahoo

Alter Hase

  • »birdfreeyahoo« ist der Autor dieses Themas

Beiträge: 756

Wohnort: Schorndorf

Beruf: Junior Software Engineer

  • Private Nachricht senden

1

31.03.2015, 22:27

Frage zu delete[]

Hallo, ich habe mal eine Frage zu dem delete[]-operator. Wenn ich Speicher mit new[] anfordere, bekomme ich ja nur die Adresse des ersten Elements. Die Größe der Elemente erkenne ich ja anhand des Pointertyps und die Anzahl der Elemente muss ich irgendwo speichern.

Wenn ich aber delete[] auf das Array aufrufe, von wo weiß das Programm dann, wie groß das Array ist, um alles wieder freizugeben? Wenn es das weiß, könnte ich es nicht auch so abfragen?

Nimelrian

Alter Hase

Beiträge: 1 216

Beruf: Softwareentwickler (aktuell Web/Node); Freiberuflicher Google Proxy

  • Private Nachricht senden

2

31.03.2015, 22:39

5 Sekunden googlen nach "how does delete[] know"

Zitat

When you allocate memory on the heap, your allocator will keep track of how much memory you have allocated. This is usually stored in a "head" segment just before the memory that you get allocated. That way when it's time to free the memory, the de-allocator knows exactly how much memory to free.

http://stackoverflow.com/a/197699
Ich bin kein UserSideGoogleProxy. Und nein, dieses Forum ist kein UserSideGoogleProxyAbstractFactorySingleton.

birdfreeyahoo

Alter Hase

  • »birdfreeyahoo« ist der Autor dieses Themas

Beiträge: 756

Wohnort: Schorndorf

Beruf: Junior Software Engineer

  • Private Nachricht senden

3

01.04.2015, 00:06

Ok, die Frage ist kann ich darauf zugreifen, z.B. indem ich auf myArray - 1 zugreife?

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

4

01.04.2015, 01:48

Nein, es gibt keinen portablen Weg um auf diese Information zuzugreifen.

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

5

01.04.2015, 03:24

5 Sekunden googlen nach "how does delete[] know"

Zitat

When you allocate memory on the heap, your allocator will keep track of how much memory you have allocated. This is usually stored in a "head" segment just before the memory that you get allocated. That way when it's time to free the memory, the de-allocator knows exactly how much memory to free.

http://stackoverflow.com/a/197699

Deshalb musst du übrigens auch immer die größe des Arrays übergeben, wenn du ein Pointer auf das Array entgegennimmst. Du solltest aber lieber Smartpointer benutzen, da ist alles drin was du brauchst, in einem Objekt.
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

6

01.04.2015, 06:33

Zudem ist es schon recht selten, dass man tatsächlich ein new[] braucht. C++ bietet dafür genug Container, sodass man mit Arrays nicht mehr arbeiten muss. Ehrlich gesagt fällt mir spontan kein Fall ein, wo man einen raw Array brauchen würde und es nicht auch mit einem Container geht.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

buggypixels

Treue Seele

Beiträge: 125

Wohnort: Meerbusch

Beruf: Programmierer

  • Private Nachricht senden

7

01.04.2015, 07:19

Es ist recht selten, dass man Arrays verwendet? Ich denke mal eher umgekehrt. Meiner Meinung nach sind Leute die std::vector o.ä. verwenden vielleicht in der Überzahl, aber dadurch wird es ja nicht besser.
Und dann immer wieder das Anpreisen von smart_prt und diesen Dingen. Ehrlich. Ich bin noch nicht so alt, als das ich mir nicht merken kann wo ich denn ein new mache und dann noch
eine delete machen muß. All dieser shared_ unique_ smart_ptr Kram ist doch albern aus meiner Sicht.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

8

01.04.2015, 07:24

Sorry, da hast Du leider eine sehr falsche und sehr schlechte Ansicht der Realität und kein gutes Verständnis von sauberem Code. Ich weiß nicht so genau warum Du meinst lieber rohe Arrays als std::vector/deque nehmen zu müssen (glaubst Du eventuell, dass Du dadurch mehr Performance bekommst?) oder dass es sicherer sei ein delete von Hand zu machen, obwohl genau das Gegenteil der Fall ist? Zudem drücken Smart-Pointer eben auch noch mehr semantische Zusammenhänge aus als es ein Raw-Pointer je könnte.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

birdfreeyahoo

Alter Hase

  • »birdfreeyahoo« ist der Autor dieses Themas

Beiträge: 756

Wohnort: Schorndorf

Beruf: Junior Software Engineer

  • Private Nachricht senden

9

01.04.2015, 07:49

Also ich habe so mitbekommen, dass vector die beliebteste Datenstruktur der STL für 1-dimensionale Container ist. Hat das einen Grund warum z.B. nicht list oder deque bevorzugt wird?

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

10

01.04.2015, 07:55

Eine List verteilt ihre Elemente einzeln und die Zugriffszeit auf zufällige Indices ist O(n) statt O(1) eines Vektors. Im Gegensatz zu einer Deque ist der Speicherbereich eines Vektors linear und durchgehend, was in diversen Fällen von Vorteil sein kann (bestes Beispiel mit Bezug auf Spieleprogrammierung ist wohl ein VBO). Die Zugriffszeit in einer Deque ist auch minimal höher als die in einem Vektor. Werden die speziellen Eigenschaften von Deque oder List nicht benötigt, scheint Vektor die einfachste Lösung. Oft kann man aber sicherlich einen Vektor durch eine Deque austauschen - speziell dann, wenn man nie direkten Index-Zugriff braucht (das schließt übrigens implizit auch Sortier-Funktionen ein).
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Werbeanzeige