Zeiger auf Array auf dem Heap nach inkrementieren löschen
-
Auf dem Heap. Auf dem Stack sind dynamische Arrays nur sehr bedingt möglich.
-
goldenBoy schrieb:
Okay. Werden die Vector Elemente auf dem Stack oder auf dem Heap angelegt???
Gegenfrage: Wieso sollte das interessant sein? Es funktioniert eben einfach.
-
und es ist bei vector garantiert, dass die elemente hintereinander liegen. theoretisch könntest du also deine pointer spielereien trotzdem machen...
scheint meint, dass du ein ganz großer 3 sterne programmierer bist

-
Noch so allgemein:
Der Pointer, dem der Rückgabewert vonnewzugewiesen wurde, sollte nie vor der Verwendung vondeleteverändert werden. Wenn du nun, wie gesagt, inkrementieren möchtest, erstellst du eben einen zweiten Zeiger. Der Zweite dient als Iterator.
-
Indem man zwischen dem eigentlichen Array und dem Iterator dafür unterscheidet:
Cat * const cat_array = new Cat[10]; Cat * cat_iterator = cat_array; ++cat_iterator; ++cat_iterator; //... delete cat_array;Eigentlich ist das auch bei Standardlib-Containern gang und gäbe, daher verstehe ich den Aufschrei nicht so ganz.
-
Das ist für mich interessant, weil ich tausende von Objekten im Vector speichern will. Und vielleicht ist auf dem Stack der Speicher zu knapp.
Also vector speichert von Haus aus alle Elemente auf dem Heap an. Und man kann den Speicher auch explizit mit dem Clean Befehl freigeben, richtig?
Welche Vorteile hat man, wenn man den Vector (Vector pointer) direkt auf dem Heap anlegt?
-
EOutOfResources schrieb:
Noch so allgemein:
Der Pointer, dem der Rückgabewert vonnewzugewiesen wurde, sollte nie vor der Verwendung vondeleteverändert werden. Wenn du nun, wie gesagt, inkrementieren möchtest, erstellst du eben einen zweiten Zeiger. Der Zweite dient als Iterator.danke für den Tipp!
-
Welche Vorteile hat man, wenn man den Vector (Vector pointer) direkt auf dem Heap anlegt?
Keine. Nur Nachteile.
-
goldenBoy schrieb:
Also vector speichert von Haus aus alle Elemente auf dem Heap an. Und man kann den Speicher auch explizit mit dem Clean Befehl freigeben, richtig?
vector kennt kein clean, aber es gibt andere Befehle die ähnliches machen. Guck eben in einer Referenz nach. Der vector verwaltet seinen Speicher vollständig selber. Wenn du einen vector explizit dazu zwingen willst, seinen kompletten Speicher freizugeben (normalerweise keine gute Idee!), dann such mal nach Clear-and-minimize
Welche Vorteile hat man, wenn man den Vector (Vector pointer) direkt auf dem Heap anlegt?
Den vector selber auf dem Heap? Die gleichen Vorteile wie bei allen Heapvariablen: Keine nennenswerten, dafür ein paar Nachteile. Man sollte schon extrem gute Gründe dafür haben, z.B. ganz besondere Anforderungen an die Lebenszeit des Objekts.
-
Danke an alle für die Hilfe
-
Oder Multithreading.
-
Tachyon schrieb:
Indem man zwischen dem eigentlichen Array und dem Iterator dafür unterscheidet:
Cat * const cat_array = new Cat[10]; Cat * cat_iterator = cat_array; ++cat_iterator; ++cat_iterator; //... delete cat_array;Eigentlich ist das auch bei Standardlib-Containern gang und gäbe, daher verstehe ich den Aufschrei nicht so ganz.
Kurze Frage: Es müsste doch
delete[] cat_arrayheißen oder nicht?
Lg freeG
EDIT:
Was erhalte ich eigentlich zurück, wenn ich wie der TE einen Zeiger habe und dort den Indexoperator anwende?
-
fr33g schrieb:
Es müsste doch
delete[] cat_arrayheißen oder nicht?
Ja.
fr33g schrieb:
Was erhalte ich eigentlich zurück, wenn ich wie der TE einen Zeiger habe und dort den Indexoperator anwende?
Einen Zeiger auf n Elemente weiter (wie der
+-Operator).EDIT: Natürlich
+-Operator.
-
fr33g schrieb:
Kurze Frage: Es müsste doch
delete[] cat_arrayheißen oder nicht?
Ja, absolut richtig.
fr33g schrieb:
Was erhalte ich eigentlich zurück, wenn ich wie der TE einen Zeiger habe und dort den Indexoperator anwende?
a[3]ist äquivalent mit*(a+3)ist äquivalent mit3[a]ist äquivalent mit*(3+a).
-
Vielen Dank euch beiden, jetzt ist es mir wieder klar

Lg freeG