Reality Geschrieben 8. März 2007 Geschrieben 8. März 2007 Hallo, kann man irgenwie in c++ den Speicher nach einem Programmdurchlauf einfach wieder löschen? Oder muss man jede einzelne Variable, die man angelegt hat, auch wieder von hand löschen? Mfg, Reality
TDM Geschrieben 8. März 2007 Geschrieben 8. März 2007 wenn du mit malloc oder new einen Speicher reservierst, muss du den auch wieder freigeben
TDM Geschrieben 8. März 2007 Geschrieben 8. März 2007 mit free oder delete BSP: #define SAFE_DELETE(p) if (p != NULL) {delete p; p = NULL;} class foo { public: foo() { m_pint = new int; } ~foo() {SAFE_DELETE(m_pint)} private: int* m_pint; };
Reality Geschrieben 8. März 2007 Autor Geschrieben 8. März 2007 Ahja, und noch ne blöde frage: wird der dekonstruktor der klasse automatisch aufgerufen, oder muss ich das auch selbst machen? Und wenn der Dekonstruktor dann aufgerufen wird (wie auch immer) werden die Membervariablen der Klasse auch gelöscht?
Klotzkopp Geschrieben 8. März 2007 Geschrieben 8. März 2007 Ahja, und noch ne blöde frage: wird der dekonstruktor der klasse automatisch aufgerufen, oder muss ich das auch selbst machen?Destruktor heißt das Ding. Und ob er aufgerufen wird, hängt davon ab, wie du das Objekt angelegt hast. Wenn es eine Autovariable war, passiert das automatisch (daher der Name ), dasselbe gilt für globale Variablen. Bei Objekten, die mit new angelegt wurden, passert das erst, wenn delete aufgerufen wird, dafür bist du verantwortlich. Und wenn der Dekonstruktor dann aufgerufen wird (wie auch immer) werden die Membervariablen der Klasse auch gelöscht?Ja.
TDM Geschrieben 8. März 2007 Geschrieben 8. März 2007 Der Destruktor wird aufgerufen, sobald das Objekt terminiert (zerstört) wird. Z.B. bei Auto-Instanzen nach beenden der Funktion. Normale Member werden auch zerstört - Pointer nicht, deswegen das Freigeben des Speichers Ok, Klotzkopp war schneller
Klotzkopp Geschrieben 8. März 2007 Geschrieben 8. März 2007 #define SAFE_DELETE(p) if (p != NULL) {delete p; p = NULL;}[/CODE]Die Prüfung auf p != NULL ist hier überflüssig.
TDM Geschrieben 8. März 2007 Geschrieben 8. März 2007 Die Prüfung auf p != NULL ist hier überflüssig. Naja, wenn p nicht gesetzt sein würde, probiert er doch NULL zu deleten oder ? Edit: ok, habs nachgelesen, stimmt ist überflüssig: The C++ language guarantees that delete p will do nothing if p is equal to NULL. Since you might get the test backwards, and since most testing methodologies force you to explicitly test every branch point, you should not put in the redundant if test. C++ FAQ (part 08 of 14)
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden