Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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

Geschrieben

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;

};

Geschrieben

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?

Geschrieben
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.
Geschrieben

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 ;)

Geschrieben
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)

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...