Frage zu new
-
Also, wenn ich jetzt innerhalb einer Methode, sagen wir mal einen Konstruktor, eine Variable folgender Maßen
int i = 0;
definiere, dann wird sie doch auf dem Stack angelegt und ihr Gültigkeitsbereich beschränkt sich auf die Methode.
Wenn ich nun folgendesint i = new int(0);
oder auch
int i = new int;
i = 0;hinschreibe, wird doch durch new bewirkt, dass die Variable auf dem Heap angelegt wird. Also jetzt meine Frage, wenn ich also die Variable mit new definiere, ist sie dann, weil sie auf dem Stack ist, global, also überall im Programm verfügbar?
-
es muss
int* i = new int;
heißen. Die Variable ist dann auf dem Heap, ohne Garbage Collector auch noch nach dem Verlassen ihres Gültigkeitsbereiches, aber dann musst du i (den Zeiger darauf) speichern, damit du noch drauf zugreifen kannst.
-
also
int i = new int;
wird nicht funktionieren.Was funktioniert ist:
int* i = new int;
jetzt liegt dein int auf dem heap, und wird erst wieder zerstört bei einem aufruf von delete!
Beim Verlassen deiner Methode verlierst du aber den zeiger i, der auf dein int verweist, und somit wird dein int unzugänglich.
-
Original erstellt von Pogo:
ist sie [die Variable] dann, weil sie auf dem Stack ist, global, also überall im Programm verfügbar?du meinst
ist sie, weil sie auf dem Heap ist, global verfügbar?A: nur, wenn du ihre Adresse kennst.
Außerdem musst du den speicher auch wieder freigeben.:edit endlich wieder mal ein edit
[ Dieser Beitrag wurde am 06.04.2003 um 19:55 Uhr von Noesis editiert. ]