我本来期望在这个程序中 A::~A()
会被调用,但现在没有被调用:
#include <iostream>
struct A {
~A() { std::cout << "~A()" << std::endl; }
};
void f() {
A a;
throw "spam";
}
int main() { f(); }
然而,如果我把最后一行改成。int main() try { f(); } catch (...) { throw; }
然后调用A::~A()
。
我正在使用来自Visual Studio 2005的"Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 14.00.50727.762 for 80x86"进行编译。命令行是cl /EHa my.cpp
。
编译器像往常一样正确吗?标准在这个问题上是怎么说的?