Warum Speicher mit new reservieren?
-
Nicht jeder ist zum Programmierer berufen...
Wenn er es nicht kapiert, ist er evtl. einfach
ungeeignet für die Aufgabe
-
Oder Assembler lernen, dann weiß man, warum es da Unterschiede gibt.
-
vielleicht hilft folgendes (für pragamatiker)
http://turing.fh-landshut.de/~jamann/Der Unterschied zwischen Stack und Heap.pdf
-
Was gibts da großartig nicht zu verstehen
1. Der Stack ist beschränkt in seiner Größe, große Objekte müssen auf den Heap.
2. Der Stack baut sich bei Scope-Ende wieder ab, wenn du Objekte über Scope-Grenzen hinaus benützen willst benötigst du den Heap
3. Nur mit dynamischen Speicher kannst du dynamisch Objekte anlegen und so tolle Dinge wie Polymorphie benützenMfG SideWinder
-
SideWinder schrieb:
3. Nur mit dynamischen Speicher kannst du dynamisch Objekte anlegen und so tolle Dinge wie Polymorphie benützen
Nein, Polymorphie hat damit nichts zu tun.
-
Direkt nicht, aber indirekt muss man auf Heap-Speicher zurückgreifen. Kenne zumindest selbst keine Möglichkeit mit Stack-Objekten Polymorphie zu betreiben.
// afaik nicht möglich: Base base = Derived();
MfG SideWinder
-
Zum Beispiel geht sowas:
void foo(Base& base) { base.methode(); }
Wo das Objekt jetzt liegt, ist egal.
-
Derived a; Base *b = &a;
Für Polymorphie braucht man nur virtuelle Funktionen und die Möglichkeit, Basisklassenzeiger (oder -referenzen) auf abgeleitete Objekte zeigen zu lassen.
-
SideWinder schrieb:
3. Nur mit dynamischen Speicher kannst du dynamisch Objekte anlegen [...]
Du kannst ja auch den Stack dynamisch allokieren. In C++ gibt es da zwar keine Standard Methode für, aber in C99 gibt es ja VLA und einige Betriebssysteme stellen Funktionen wie man: alloca(3) zur Verfügung.
include <alloca.h> struct foo { }; int main() { foo *ptr=new (alloca(sizeof(foo)))foo; }
-
Ok, ok, aber 1. und 2. sollten ebenfalls Grund genug sein als Schüler sich mit dem Heap abzufinden
MfG SideWinder