Um auf unser Primzahlproblem zurückzukommen: Was zur Compilierzeit bekann ist,
ist daß wir eine Anzahl von Primzahlen berechnen wollen, wie viele das sein
werden ist aber unbekannt. Eine Lösung ist dem Compiler mitzuteilen, daß
wir einen Pointer auf integer haben wollen und dann zur Laufzeit so viele
Objekte erzeugen, wie wir benötigen. Auch das geht mit dem new
-Operator.
void primzahl(int m)
{
int* prim; // Pointer auf integer
prim = new int[m]; // m ints alloziieren
// Berechnung der Primzahlen
...
// Ausgabe
for (int i = 0; i < m; i++)
cout << *(prim+i);
delete[] m;
}
Der delete
-Operator hat für Array-Konstrukte die Form mit den
eckigen Klammern. Auch hierauf ist zu achten. Andernfalls würde nur
das erste Objekt gelöscht und alle anderen Objekte wären noch im
Speicher und würden unnötig Speicherplatz verbrauchen; es könnte aber
nicht mehr auf sie zugegriffen werden.