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.