Der Konstruktor (in Ermangelung einer beliebigen ctor-Initialisiererliste ) ruft den Standardkonstruktor für jedes Unterobjekt auf.
Da Sie keine Basisklassen haben und Ihre Elementvariablen primitive Typen sind, wird nichts unternommen.
Gleiches gilt für den Destruktor. Ihr Compiler wird implizit generiert, da Sie keinen deklariert haben und der Destruktor für jedes Unterobjekt aufgerufen wird. Wiederum ist das trivial, weil Ihr einziges Unterobjekt ein Aggregat von Primitiven ist.
Nun wird der gesamte Speicher der Klasse freigegeben, wenn Sie ihn löschen. Da das Array in der Klasse eingebettet ist, gehört es zur selben Speicherregion und wird gleichzeitig freigegeben.
Der implizit definierte (Standard) Destruktor wird den Destruktor für jedes Mitglied aufrufen. Im Falle eines Member-Arrays wird der Destruktor für jedes Element des Arrays aufgerufen.
Beachten Sie, dass Zeiger keine Destruktoren haben; Sie müssen sie manuell löschen. Sie haben dieses Problem nicht in dem bereitgestellten Beispiel, aber es ist etwas zu beachten.
Wenn Ihre Klasse / Struktur einen Zeiger enthält und Sie explizit etwas zuweisen, auf das sich der Zeiger beziehen soll, müssen Sie normalerweise einen passenden delete
im dtor schreiben. Elemente, die direkt in die Klasse / Struktur eingebettet sind, werden automatisch erstellt und gelöscht.
Hier wird X :: x automatisch erstellt / zerstört. X :: y (oder, um technisch korrekt zu sein, worauf X :: y zeigt) wird nicht - wir ordnen es im ctor zu und zerstören es im dtor.
Tags und Links c++ memory-management destructor