que esperaba A::~A()
a ser llamados en este programa, pero no lo es:¿Por qué no se solicita el destructor en la excepción?
#include <iostream>
struct A {
~A() { std::cout << "~A()" << std::endl; }
};
void f() {
A a;
throw "spam";
}
int main() { f(); }
Sin embargo, si cambio de última línea para
int main() try { f(); } catch (...) { throw; }
continuación A::~A()
es llamado.
Estoy compilando con "Microsoft (R) de 32 bits C/C++ compilador de optimización Versión 14.00.50727.762 de 80x86" de 2005. Estudio de línea de comandos Visual es cl /EHa my.cpp
.
¿El compilador está correcto como de costumbre? ¿Qué dice la norma sobre este asunto?
Sólo a título informativo, que reproduce este mismo problema con el mismo código en Visual C++ 2003. +1 para la pregunta. – paercebal