【发布时间】:2014-02-16 06:10:48
【问题描述】:
我发现了一种我从未见过的非常非常奇怪的行为。 我正在处理一个复杂的 VS2005 C++ 项目。
class Tester
{
public:
Tester()
{
TRACE("Construct Tester");
}
~Tester()
{
TRACE("~Destruct Tester");
}
};
void Thrower()
{
Tester X;
throw std::exception("Booom");
}
当调用Thrower() 时,您希望在跟踪输出中看到什么?
该 Tester 是在堆栈展开时构造然后销毁的?
至少我希望如此,但 Tester 的析构函数永远不会被调用!
不可能!?!?!?!
这是 Visual Studio 中的错误吗?
我搜索了很多,但我什至在 Stackoverflow 上都没有找到答案。
【问题讨论】:
标签: c++ exception destructor managed stack-unwinding