C++, __essayer et try/catch/finally

Je me demandais un peu sur le C++ try/catch/finally blocs. J'ai vu ces commandes avec deux caractères de soulignement comme l' __essayer. Mais MVSC projets 2010 également fonctionner sans les traits de soulignement. Alors, quand avez-vous besoin de ces traits de soulignement?

  • finally n'est pas en C++ et est vraiment inutile pour correctement écrit de code C++.
  • Dire que quelque chose est inutile, n'est pas beaucoup vous aider si vous n'avez pas l'appui de votre déclaration avec quelques explications.
  • finally est inutile, parce que RAII est une meilleure façon de le faire dans presque tous les cas et scope_guard prend soin du reste de 0,1%.
  • Merci pour l'astuce pour RAII. C'est certainement une bonne pratique. Un peu de douleur, si la classe que vous utilisez ne le suivez pas, donc, finalement, pourrait être encore utile. E. g.: Transaction * t = manager->BegintTransaction(); try { t->Write("Foo");} catch (...) { LogError(); throw; } finally { manager->CloseTransaction(t); }` de Cette façon, vous n'avez pas besoin de fermer la transaction dans les deux try bloc et dans le catch bloc ainsi, juste avant de re-jeter l'exception.
  • Dans les cas où un type n'a pas été conçu pour le nettoyage et vous êtes d'avoir à manuellement rénovation avec le nettoyage, vous pouvez utiliser quelque chose comme scope_guard à la place. Ici comment votre exemple pourrait ressembler. IMO c'est toujours mieux que de finally. Ce n'est pas la norme, mais encore voici la proposition, et vous pouvez vous servir de la 3e partie libs.
  • des acclamations. C'est assez intéressant. Merci encore.

InformationsquelleAutor martin | 2011-08-13