Anfängerfrage zu Konstruktoren/Destruktoren
-
Hallo mal wieder!
Ich wollte mal fragen, ob mir jemand erklären kann, warum man bei Klassen-Deklarationen auch Konstruktoren und Destruktoren definieren sollte.
Nach meinem bisher leider gerigem Verständnis, das ich aus meinem Buch darüber erworben habe, kann man den Konstruktor wie eine Funktion einsetzen, die keinen Wert zurückgibt und dass der Compiler die Standardkonstruktoren/-destruktoren aufruft, wenn man diese nicht selbst definiert.
Leider fehlt mir die genaue Erkenntnis darüber was diese beiden Befehle nun genau ausführen bzw. warum es (laut meinem Büchlein - ohne weitere Beschreibung) wichtig ist diese selbst zu definieren (anstatt einer normalen Funktion meinetwegen)!?!
Hat es etwas mit der Speicherverwaltung zu tun?
Vielen Dank für Eure Mühe
Markus
-
Du kannst Werte im Konstruktor initialisieren:
class myclass { int *a; public myclass(unsigned int b) { a = new int[b]; } ~myclass() { delete a; } };
Ohne den Konstruktor könnte der Zeiger uninitialisiert sein,
so muss jedoch immer die Vorgegebene Schnittstelle benutzt werden.
Durch den Destruktor ist auch das Aufräumen nach dem Zerstören der
Instanz gewährleistet.Devil
-
Sehe ich das jetzt richtig, dass er also dazu dient Fehler zu vermeiden?
-
Ja, er stellt sicher, das bestimmte dinge passieren, um z.B. zu gewährleisten
das eine Variable einen Inhalt hat, das ein Pointer initialisiert oder
genullt wird.Devil
-
Aber der Standardkonstruktor würde diese Arbeit doch auch übernehmen, oder?
Wenn ja, wieso macht man sich dann die Mühe?
(sorry wenn ich zuviel nachfrage)
-
Markus S. schrieb:
Aber der Standardkonstruktor würde diese Arbeit doch auch übernehmen, oder?
Wenn ja, wieso macht man sich dann die Mühe?
(sorry wenn ich zuviel nachfrage)
Eben nicht.
Wenn kein Konstruktor definiert wurde, generiert der Compiler einen leeren Konstruktor:... myclass() {} ...
Du könntest diesen aber auch überschreiben:
... myclass() { a = NULL; } ...
Devil
-
Ah!
Alles klar. Danke nochmals.
Gruß
Markus