Zeiger auf Objekte selbsterstellter Klassen

Die entscheidende Rolle des Destruktors (1/2)

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;
};