Stack oder Heap - wann was?
-
Hallo, ich habe mir einige Literatur zur Speicherallokation in C++ durchgelesen und weiß, dass ich Variablen oder Objekte im Stack speichern kann oder im Heap durch new und delete.
Wann sollte ich Variablen oder Objekte ganz normal deklarieren und wann mit new/delete? Das ist mir aus der bisherigen Literatur noch nicht klar geworden.
Dankeschön im Vorraus!
Viele Grüße,
Sveno
-
Immer ganz normal, außer ganz selten, zum Beispiel wenn das Array mehr als viele tausend Bytes groß ist oder wenn die Funktion Objekte erzeogen können soll, die nach Funktionsende noch leben oder für Polymorphietricks.
-
Mit new legt man Objekte im dynamischen Speicher ab. D.h. in dem Fall, wenn man erst zur Laufzeit des Programm entscheidet, wann und welches Objekt man erzeugen will.
Auf dem Stack kommen die Objekte, die man undynamisch erzeugt... also schon vor Programmstart erzeugt weiß.
Beispiel:
Base* foo(bool a) { if(a) return new A; else return new B; }Das obige Beispiel zeigt sehr schön, das ich hier erst zur Programmlaufzeit (dynamisch) entscheiden kann, ob ein Objekt vom Typ A oder B erzeugt werden soll. Das wird mit Stackobjekten nicht funktionieren.
-
Das Thema scheint in letzter Zeit beliebt zu sein:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-250825.html
http://www.c-plusplus.net/forum/viewtopic-var-t-is-249787.html
-
Vielen Dank, ihr habt mir sehr geholfen!