Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Speicher löschen

Empfohlene Antworten

Veröffentlicht

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

Und wie mache ich das?

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;

};

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?

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.

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

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)

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.