Unsere Datenschutzrichtlinie wird in Kürze aktualisiert. Bitte sehen Sie sich die Vorschau an.

C++ Grundkurs

Virtueller Destruktor

Testen Sie unsere 2016 Kurse

10 Tage kostenlos!

Jetzt testen Alle Abonnements anzeigen
Ein virtueller Destruktor legt die Ausführung sämtlicher Destruktoren einer Ableitungshierarchie fest.
02:28

Transkript

In dieser Lektion werde ich Ihnen virtuelle Destruktoren in C++ vorstellen. Falls Sie ein Objekt über einen Zeiger auf eine Basisklasse oder eine Referenz zerstören, müssen Sie sichergehen, dass alle Destruktoren der abgeleiteten Klasse aufgerufen werden. Einfacher wird es in dem Beispiel hier. Ich habe einen Pointer auf *Account* und initialisiere in einem Objekt von einer abgeleiteten Klasse *BankAccount*. Wenn ich den Pointer *aptr* lösche, will ich, dass nicht nur der Destruktor von *Account* sondern auch von *BankAccount* aufgerufen wird. Das Gleiche gilt für Referenzen. Wenn ich eine Referenz auf *Account* besitze und die in meinem *BankAccount* initialisiere, will ich, dass alle Destruktoren von *Account* bis *BankAccount* aufgerufen werden. Das kann sichergestellt werden, indem der Destruktor von *Account* virtuell deklariert wird. Angenommen Sie machen das nicht, was passiert dann? Dann hat das Programm undefiniertes Verhalten. Das bedeutet, dass in der Regel, wenn Sie den Destruktor von *aptr* oder *aRef* aufrufen, nur der Destruktor von Account aufgerufen und nicht alle abgeleiteten Destruktoren. Das zeige ich Ihnen jetzt am Beispiel. Ich habe hier eine Klasse *A*, *B* und *C*. Alle haben einen virtuellen Destruktor. Virtuell, virtuell, virtuell. Die Virtualität wird sozusagen vererbt. Das heißt durch das, dass ich einen virtuellen Destruktor in *A* habe, ist der in *B* und in *C* auch virtuell. Sie sehen, mit dem Destruktor von *A* bekomme ich jeweils den Destruktor *A*, Destruktor *B* und Destruktor *C* aus. Hier zeige ich Ihnen die Sache in der Anwendung. Ich erzeuge ein Objekt vom Typ *C* und weise es *A* zu. Wenn ich jetzt *aptr* lösche, wird der von *C* aufgerufen, dann der von *B*, der von *A*. Das Verhalten ist gewährleistet, weil die Destruktoren hier alle virtuell sind. Das Gleiche gilt, wenn ich die Indirektion auch über eine Referenz mache. *aRef* ist eine Referenz auf *A*. Die initialisiere ich mit dem Objekt *c* vom Typ *C*. Wenn das Objekt seinen Gültigkeitsbereich verlässt, werden die Destruktoren von *C*, *B* und *A* ausgeführt. In dieser Lektion habe ich Ihnen virtuelle Destruktoren vorgestellt. Virtuelle Destruktoren bewirken, dass, wenn Sie einen Pointer auf ein Objekt einer abgeleiteten Klasse oder eine Referenz auf eine abgeleitete Klasse halten, dass, wenn Sie diese Referenz oder den Pointer löschen, alle Destruktoren der abgeleiteten Klassen aufgerufen werden. Dieses Aufrufen geschieht natürlich automatisch.

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!