Am 14. September 2017 haben wir eine überarbeitete Fassung unserer Datenschutzrichtlinie veröffentlicht. Wenn Sie video2brain.com weiterhin nutzen, erklären Sie sich mit diesem überarbeiteten Dokument einverstanden. Bitte lesen Sie es deshalb sorgfältig durch.

C++ Grundkurs

Was sind Destruktoren?

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
C++ verfügt mit den Destruktoren über spezielle Methoden, die unmittelbar vor der Zerstörung einer Klasseninstanz aufgerufen werden.
03:49

Transkript

In dieser Lektion gehe ich auf die Destruktoren in C++ ein. Destruktoren werden in C++ genau dann aufgerufen, wenn eine Klasseninstanz unmittelbar vor ihrer Zerstörung steht. Sinn ist es, besondere Aktionen auszuführen, bevor das Objekt verschwindet. Das kann, so ist es in der Regel, das Freigeben von Speicher sein. Sie können aber auch ein Lock freigeben, eine Datei schließen oder andere Aufräumarbeiten machen. Destruktoren werden automatisch aufgerufen. Automatisch heißt, wenn ein Objekt seinen Gültigkeitsbereich verlässt oder wenn Sie es explizit mit *delete* oder mit *delete* für Array aufrufen. Destruktoren besitzen wie Konstruktoren den gleichen Namen wie die Klasse, in diesem Fall *Account*. Da kommt hier eine Tilde davor. Sie erwarten kein Argument und geben keinen Wert zurück. Wie Konstruktoren können Sie sie auch innerhalb und außerhalb der Klasse definieren. Jetzt will ich Ihnen noch Destruktoren in der Anwendung zeigen. Hier eine einfache Klasse *HelloGoodBye*, die nur zwei Dinge macht. Sie sagt *Hello*. Sobald eine Instanz der Klasse instanziiert wird, erscheint die Ausgabe *Hello from numb*. *numb* ist die Nummer, die hier der Konstruktor mitbekommt. Damit man nachvollziehen kann, welcher Konstruktor gerade aufgerufen wird. Hier der Destruktor. Sie sehen, den definiere ich außerhalb der Klasse. Das funktioniert dermaßen, dass ich den Klassennamen mit dem Bereichsoperator voranstelle und dann genauso wie ich ihn innerhalb der Klasse definieren würde. Diesmal gibt er natürlich *Good Bye* aus, weil er sich verabschiedet. Dann hier noch eine Funktion *func*. Die ruft lokal den Konstruktor auf und wir werden sehen, was der Destruktor dann tut. Jetzt gehe ich einmal das Programm von oben bis unten durch. Ich gehe mal soweit, bis der Konstruktor und der Destruktor von *HelloGoodBye* verschwunden ist. Das reicht. Ich fange einmal an. Ich rufe das Programm *destructor* auf. Hier wird *helloGoodBye* mit 1 aufgerufen. Das ist ein globales Objekt. Hier sehen Sie das. Hier wird der Konstruktor ausgeführt. Dann beginnt die *main*-Funktion. Dann *Hello from: 2*. Das ist unerheblich, ob ich das Objekt auf dem Stack von *main* erzeuge oder als Objekt auf dem Heap. Da wird auch *Hello from: 3* ausgeführt. Hier noch ein sehr interessanter Fall. *helloGoodBye(4)*. Dieses *helloGoodBye* führe ich im begrenzten Gültigkeitsbereich aus. Diese geschweiften Klammern hier definieren einen sogenannten Block. Das heißt, das Objekt ist dann ungültig, wenn es diesen Block verlässt. Aus diesem Grund kommt kurz nach *Hello from: 4* sofort *Good Bye from: 4*, weil das Objekt *helloGoodBye* hier seine Gültigkeit verliert. Seine Gültigkeit verliert es aber auch, wenn ich explizit ein Objekt destruiere. In diesem Fall explizit den Destruktor aufrufe und das tue hier mit dem Ausdruck *helloGoodByePtr*. Dadurch wird *helloGoodByePtr(3)* der Destruktor von 3 ausgeführt. Dann hier rufe ich die Funktion *func* auf. In der Funktion *func* erzeuge ich in dem lokalen Gültigkeitsbereich hier oder dem Gültigkeitsbereich der Funktion anders ausgedrückt, das Objekt *helloGoodBye* und der Konstruktor wird aufgerufen und sofort der Destruktor wieder aufgerufen. Besonders interessant ist das hier. Zum Schluss der *main*-Funktion schreibe ich noch *End of main*, damit man es besser nachvollziehen kann. Sie sehen, hier wird *End of main* geschrieben. Mit *End of main* verlassen diese Objekte hier den Gültigkeitsbereich, die ich noch nicht explizit zerstört habe. Das ist im ersten Fall *helloGoodBye(2)*. Sie sehen *Good Bye 2*, das gültig ist im Scope dieser Funktion *main*. Im zweiten Fall ist es das globale Objekt *helloGoodBye(1)*, das hier eben seine Gültigkeit verliert. In dieser Lektion habe ich Ihnen Destruktoren in C++ vorgestellt und Ihnen insbesondere gezeigt, dass Destruktoren automatisch ausgeführt werden, wenn Objekte ihren Gültigkeitsbereich verlassen.

C++ Grundkurs

Steigen Sie in die mächtige Programmiersprache C++ ein und lernen Sie dabei alle wichtigen Funktionen mit Anwendungsbeispielen kennen.

8 Std. 14 min (147 Videos)
Derzeit sind keine Feedbacks vorhanden...
 

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!