LinkLe 23/04/2010 à 10:49
J'avais étudié les mécanismes des exceptions lancées par valeur sous Visual, notamment au niveau de la position des variables dans la pile.
L'exception est au sommet de la pile ("sur" les objets du try), mais les destructeurs des objets du try sont quand même appelés avant. Pendant le catch, les objets du try sont donc détruits mais toujours sur la pile, en attendant que l'exception soit détruite (à la fin du dernier catch).
Avec les normes C++ un tant soit peu récentes, il est bel et bien déconseillé de lancer les exceptions en les allouant sur le tas. À ma connaissance, il n'y a plus que MFC qui fait ça, parce que MFC date d'avant les normes en question (dans les premières versions de MFC, il n'y avait même pas de mécanisme d'exception standard, d'où les macros).
PS: Il me semble que la référence const en général est une exception aux règles de scoping, pas seulement dans le contexte des traitements d'exception: Notamment, je crois me rappeler qu'une référence const vers un temporaire non-nommé étend sa durée de vie à celle de la référence.