Fragen zu new und delete :)
-
Hi @all.
Ich habe ein paar Verständnisfragen da ich mir über etwas unsicher bin.
1. Wenn ich mit new eine int-variable erzeuge (ich gehe von 4 byte aus), dann brauche ich doch eigentlich 8 byte dafür oder?
4 byte für den Zeiger auf diese int-variable (auf dem stack)
und nochmal 4 byte für die variable selbst (auf dem heap). Sehe ich das richtig?
2. Der Zeiger der auf diese Variable zeigt befindet sich ja auf dem stack. was mache ich nun wenn ich die funktion verlasse??? dann ist der zeiger ja nicht mehr da. die 4 byte auf dem stack sind ja jetzt wieder frei, was ist jedoch mit meiner heap-variable?? die ist jetzt herrenlos oder? ich weiß, in diesem fall sollte man delete verwenden, aber was kann ich machen wenn ich die variable weiterhin verwenden will, aber schon etwas anderes zurückgebe?thx & cu
-bunti
-
Bunti schrieb:
1. Wenn ich mit new eine int-variable erzeuge (ich gehe von 4 byte aus), dann brauche ich doch eigentlich 8 byte dafür oder?
4 byte für den Zeiger auf diese int-variable (auf dem stack)
und nochmal 4 byte für die variable selbst (auf dem heap). Sehe ich das richtig?Bei den meisten Implementierungen ist es so, aber um den Speicher auf dem Stack brauchst du dich überhaupt nicht zu kümmern. Das wird automatisch vom Compiler verwaltet.
Bunti schrieb:
2. Der Zeiger der auf diese Variable zeigt befindet sich ja auf dem stack. was mache ich nun wenn ich die funktion verlasse??? dann ist der zeiger ja nicht mehr da. die 4 byte auf dem stack sind ja jetzt wieder frei, was ist jedoch mit meiner heap-variable?? die ist jetzt herrenlos oder? ich weiß, in diesem fall sollte man delete verwenden, aber was kann ich machen wenn ich die variable weiterhin verwenden will, aber schon etwas anderes zurückgebe?
Du hast recht, dass der Zeiger verloren geht und dass der Speicher sozusagen herrenlos ist. Es gibt mehrere Möglichkeiten mehr als eine Sache zurückzugeben. Zum einen könntest du den Rückgabewert zusammen mit dem Zeiger in eine Struktur packen. Oder du übergibst per Referenz einen Zeiger an deine Funktion. Wird dieser in der Funktion verändert, so ist das außerhalb sichtbar. Du kannst also damit den Zeiger nach außen geben.