This erscheint ähnlich wie wo ich gehe und this Frage.C++ Inner Class Destructor Ressourcenmanagement
sich das folgende
template<typename T>
class A
{
private:
class B
{
private:
B* link;
public:
B();
~B();
};
B* head;
public:
A();
~A();
};
Die oben unter Übernahme der Funktion, die die Struktur erzeugt zu erstellen und verbinden jede B
deklariert und definiert
Wenn ich die Operation durchführen, wie oben gezeigt, , dann
B* position = head;
position = head->link;
head->link = nullptr;
delete[] head;
head = position;
Ich verstehe, dass der Aufruf des inneren Klassen-Destruktors zum Aufruf des äußeren Klassen-Destruktors führt. Habe ich richtig Müll behandelt beim Sammeln der Ressource x
oder habe ich etwas undefiniertes gemacht?
Warum denken Sie, die innere Klassendestruktor Aufruf (die Sie nie Machen Sie in dem Beispiel, das Sie gepostet haben, dass der äußere Klassendestruktor aufgerufen wird? Es ist genau umgekehrt, oder? – bnaecker
"Habe ich etwas Undefiniertes gemacht?" Ja. Der Aufruf von 'delete []' auf einem Nicht-Array-Typ ist UB. – bnaecker
Ich denke, Sie verwechseln "innere" Klasse mit "Basis" -Klasse. Wenn die Basisklasse über einen virtuellen Destruktor verfügt, dann wird der Destruktor der abgeleiteten ("äußeren") Klasse aufgerufen, wenn der (innere) Klassendestruktor der Klasse aufgerufen wird. Und es gibt kein "Müllsammeln" in C++. – VTT