Wie bei der Deklaration von Pointertypen kann es auch bei der Benutzung
des new
-Operators zu Schwierigkeiten kommen den Typ richtig anzugeben.
Vorgehensweise: Um einen new
-Aufruf für ein einziges Objekt zu
erreichen, laßt man den innersten*
aus der Pointerdeklaration und
den Bezeichnernamen weg.
Dieser spezifiziert "ist ein Pointer auf den Typ".
int* a; // Pointer auf int
a = new int;
int** b; // Pointer auf Pointer aus int
b = new (int*);
Für einen new
-Aufruf, der einen Array erzeugen soll, werden der
Dereferenzierungsoperator und der Bezeichnername wie oben enfernt und durch
den Indexoperator []
ersetzt mit Angabe der Größe des Arrays
int* a; // Pointer auf int
a = new int[3]; // Pointer auf 3 ints
int** b; // Pointer auf int-Pointer
b = new (int*[3]); // Pointer auf drei int-Pointer
int (*c)[10]; // Pointer auf 10-Integer-Array
c = new (int ([3])[10]); // Pointer auf drei 10-Integer-Arrays
Besonders das letzte Beispiel zeigt, daß die Typen nahezu beliebig
unübersichtlich werden. Auch wenn nicht immer sofort klar sein sollte, wie
ein bestimmter Typ deklariert wird, so wird beim new
-Aufruf der
Compiler sicher meckern, wenn die Umwandlung nicht funktioniert.