Von überall kommt ihr über dieses Logo auf diese Seite zurück!

new und delete


new
  • reserviert Speicher auf dem Heap
  • (ruft den Konstruktor des Objektes auf)
  • liefert die Adresse des neuen Objektes zurück

delete
  • erwartet die Adresse eines Objektes im Heap-Speicher
  • (ruft den Destruktor des Objektes auf)
  • gibt den Speicher wieder frei

Anwendung
int *p;  // Zeiger auf int
p = new int;  // Speicher wird reserviert
*p=3;    // Speicherbereich wird ein Wert zugewiesen

...

delete p;  // Speicherbereich wird wieder freigegeben.

Anwendung (Array)
int *p;
p = new int [10]; // Reservierung von 10 * sizeof(int)
p[5] = 7;         // p kann wie ein Array verwendet werden

...

delete[] p;       // Freigabe aller Elemente

Dynamisches Zeichenlänge eines Arrays

// cperson.h
class CPerson {
private:
  char *m_name;
  int m_geb;
public:
  CPerson (const char *name);
};

// cperson.cpp
// Konstruktor
CPerson::CPerson(const char *name)
{
  m_name = new char[strlen(name)+1];
  strcpy (m_name,name);
}

CPerson::~CPerson()
{
  delete[] m_name;
}
Der Konstruktor erwartet einen Zeiger auf das erste Element eines Strings. Anschließend wird mit dem new Operator ein Speicherplatz reserviert, der genau ausreicht um den String inklusive der abschließenden 0 aufzunehmen. Im Destruktor wird der Speicherplatz mit delete wieder freigegeben, da sonst ein Speicherleck entstehen könnte.



Zurück auf die Vorlesung: Visual C++-Seite <> Homepage