Pourquoi C n'utilise-t-il pas d'exceptions imbriquées pour autoriser le lancement à partir de destructeurs ?
Bien qu'il soit généralement déconseillé de lancer des exceptions à partir de destructeurs, il Il y a eu des propositions visant à utiliser des exceptions imbriquées dans de tels scénarios. Cependant, cette idée n'a pas été mise en œuvre en raison de certaines limitations.
Exceptions imbriquées vs. std::terminate
Lorsqu'une exception est levée à partir d'un destructeur, une autre exception peut-être "en vol". Les exceptions imbriquées permettent d'empiler plusieurs exceptions, mais dans ce cas, la manière de gérer la situation n'est pas immédiatement claire. Historiquement, il a été décidé que std::terminate (ou son gestionnaire associé std::terminate_handler) devait être appelé.
Limitations des exceptions imbriquées
Bien que les exceptions imbriquées puissent résout potentiellement le problème du lancement à partir des destructeurs, il existe des limitations pratiques :
Statut actuel et perspectives futures
À partir de C 11 et C 14, les exceptions imbriquées sont non utilisé pour lancer des destructeurs. std::terminate reste le comportement par défaut. Cependant, cela pourrait être sujet à changement dans les futures versions C si les problèmes potentiels de performances et de compatibilité sont résolus.
Approches alternatives
Au lieu de lancer des destructeurs, des approches alternatives peuvent être pris en compte :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!