Variabeln löschen
-
Hi
Ich habe mal eine Grundsätzliche Frage zum Löschen von Variabeln.
Zur Zeit habe ich eine sehr grosse Software mit diversen Klassen.
Zur Zeit lösche ich keine Variabeln. Sollte ich dies tun?
Ich habe im Task-Manager gesehen, dass jedesmal wenn eine Klasse oder Funktion aufgerufen wird, in welcher neue Varibeln angelet werden wird auch der benötige Speicher der Software grösser. Wird der Speicher einer Variabel nicht automatisch freigegeben, sobald die Funktion beendet wurde oder wenn die Klasse beendet wurde?Wie kann ich ansonsten folgende Datentypen löschen?
CString
int
CArray(...)
COleDateTimeVielen Dank
-
welche sprache?
-
Sorry hab ich ganz vergessen
C++ (mit MFC)
-
Stack-Speicher räumt sich selbst wieder auf, nur dynamisch allokierter Speicher muss wieder freigegeben werden. Das gilt für native Typen wie 'int's ebenso wie für Klassen wie CString, denn die verwalten ihren Speicher ja selbst.
void foo() { CString a; ... } // Hier wird a wieder automatisch abgeräumt void foo2() { CString* a = new CString(); delete a; }
Für jedes new ein delete, für jedes malloc ein free und für jedes new[] ein delete[].
-
Wie sieht es den aus, wenn ich einen Pointer einer Funktion übergeben? Muss ich diese am Ende der Funktion auch mit delete löschen?
-
Wenn du einen Pointer übergibst, wird nichts von den eigentlichen Daten dupliziert, also musst du auch nur einmal, wenn du die Daten nirgends mehr brauchst, delete aufrufen und nicht für jeden Funktionsaufruf.
-