This apparaît similaire à l'endroit où je suis dirigé ainsi que this question.C++ classe intérieure Destructor Resource Management
Considérez ce qui suit
template<typename T>
class A
{
private:
class B
{
private:
B* link;
public:
B();
~B();
};
B* head;
public:
A();
~A();
};
Le crée au-dessus de la structure ci-dessous assume la fonction de créer et de relier chaque B
est déclarée et définie
Si j'effectue l'opération comme indiqué ci-dessus , puis
B* position = head;
position = head->link;
head->link = nullptr;
delete[] head;
head = position;
Je comprends que l'appel du destructeur de classe interne entraînera l'appel du destructeur de classe externe. Ai-je correctement géré la collecte des ordures la ressource x
ou ai-je fait quelque chose de non défini?
Pourquoi pensez-vous d'appeler la destructor classe interne (que vous ne faire dans l'échantillon que vous avez posté) aura comme conséquence le destructeur de classe externe appelé? C'est l'inverse, non? – bnaecker
"Ai-je fait quelque chose de non défini?" Oui. L'appel 'delete []' sur un type non-tableau est UB. – bnaecker
Je pense que vous confondez la classe "interne" avec la classe "base". Si la classe de base a un destructeur virtuel, alors le destructeur de la classe dérivée ("externe") sera appelé quand le destructeur de classe de base ("interne") sera appelé. Et il n'y a pas de "collecte des ordures" en C++. – VTT