Ich erwartete A::~A()
in diesem Programm aufgerufen werden, aber es ist nicht:Warum Destruktor bei Ausnahme nicht aufgerufen wird?
#include <iostream>
struct A {
~A() { std::cout << "~A()" << std::endl; }
};
void f() {
A a;
throw "spam";
}
int main() { f(); }
Allerdings, wenn ich letzte Zeile zu
int main() try { f(); } catch (...) { throw; }
dann A::~A()
ist genannt ändern.
Ich kompiliere mit "Microsoft (R) 32-Bit-C/C++ Optimierungscompiler Version 14.00.50727.762 für 80 x 86" von Visual Studio 2005. Befehlszeile ist cl /EHa my.cpp
.
Ist Compiler richtig wie gewohnt? Was sagt der Standard dazu?
Nur zur Information, reproduziert ich das gleiche Problem mit dem gleichen Code in Visual C++ 2003. +1 für die Frage. – paercebal