next up previous contents
Next: Organisation in Implementierungs- und Up: Grundlagen von C++ Previous: Dateien (Files)


Dynamische Speicherverwaltung

Zum Anfordern von Speicher dienen in C++ die Operatoren new und new [] für einzelne Datenelemente oder Felder. Das Freigeben des Speichers erfolgt mit delete und delete [].
   int    *p_i  = new int;
   Person *p_p  = new Person("B.Stroustrup",45);
   int        n = 40;
   int    *pa_i = new int[n];
// ...
   delete   p_i;
   delete   p_p;
   delete[] pa_i;

Die Anforderung geschieht durch Angabe des Typs oder des Klassennamens nach new. In diesem Fall wird ein Datenelement der Klasse oder des Typs im Speicher mit Hilfe des zugehörigen Defaultkonstruktors angelegt und der Operator gibt einen Zeiger auf dieses Element zurück. Um einen anderen als den Defaultkonstruktor zu verwenden, benutzt man nach dem new einfach den entsprechenden Konstruktoraufruf, wie oben für die Klasse Person gezeigt.

Für Felder wird new[] verwendet. Hier wird Speicherplatz für die Anzahl von Speicherelementen angefordert, die innerhalb der eckigen Klammern angegeben ist. Für jedes Element wird der Defaultkonstruktor aufgerufen. Der Operator new[] gibt einen Zeiger auf das erste Datenelement zurück. Zum Zugriff auf die Elemente jenseits des ersten verwendet man pointer-Arithmetik oder subscripting mit [].

   Person  *p = new Person[100];
   p[0] = Person("Matthias",30);
   p[1] = Person("Stefan",32);
Der Operator new wirft die exception bad_alloc, falls die Speicheranforderung fehlschlägt. Sollte diese unbehandelt bleiben, schreibt das Programm ein core file und bricht ab.



© R.Hilfer et al., ICA-1, Univ. Stuttgart
28.6.2002