相关疑难解决方法(0)

为什么析构函数不会被异常调用?

我希望A::~A()在这个程序中被调用,但它不是:

#include <iostream>

struct A {
  ~A() { std::cout << "~A()" << std::endl; }
};

void f() {
  A a;
  throw "spam";
}

int main() { f(); }
Run Code Online (Sandbox Code Playgroud)

但是,如果我将最后一行更改为

int main() try { f(); } catch (...) { throw; }
Run Code Online (Sandbox Code Playgroud)

然后A::~A() 称为.

我正在从Visual Studio 2005编译"Microsoft(R)32位C/C++优化编译器版本14.00.50727.762 for 80x86".命令行是cl /EHa my.cpp.

编译器像往常一样吗?标准对此事有何评价?

c++ destructor exception stack-unwinding visual-c++

50
推荐指数
2
解决办法
1万
查看次数

标签 统计

c++ ×1

destructor ×1

exception ×1

stack-unwinding ×1

visual-c++ ×1