Wie wir schon gelernt haben ist es notwendig ein mittels new
erzeugtes Objekt auch wieder mit delete
freizugeben, damit keine
Speicherlücken entstehen.
Wenn eine Klasse einen Zeiger als Element besitzt, so wird dieser
i. allg. während des Programmablaufs irgendwann gesetzt und dies
häufig mittels eines new
-Aufrufes. Wenn eine Instanz dieses Objektes
ihrern Gültigkeitsbereich verläßt, so werden zwar automatisch alle
Elemente auch gelöscht, nicht aber die Speicherbereiche der Pointerelemente.
Dies muß der Programmierer selber erledigen.
Hierzu existiert der Destruktor einer Klasse, der immer dann aufgerunfen wird,
wenn ein Objekt gelöscht werden soll. Die Aufgabe des Programmierers ist
es jetzt alle allozierten Pointer wieder freizugeben. Falls ein Pointer
nicht alloziert wurde ist es nicht weiter schlimm, wenn der Pointer
dennoch freigegeben wird. Man muß nur aufpassen, daß nicht Speicherbereiche
freigegeben werden, die noch benötigt werden, z.B. wenn die Zuweisung an den
Pointer nicht über new
erfolgte.
Erweitern wir also unsere Klassendefinition:
class A
{
public:
A() {};
~A() { delete y};
A(int i, int j = 0) { x = i; y = new int(j); }
int x;
int* y;
};