我发现了一种我从未见过的非常奇怪的行为。我正在处理一个复杂的 VS2005 C++ 项目。
class Tester
{
public:
Tester()
{
TRACE("Construct Tester");
}
~Tester()
{
TRACE("~Destruct Tester");
}
};
void Thrower()
{
Tester X;
throw std::exception("Booom");
}
Thrower()
当被调用时,您希望在 Trace 输出中看到什么?当堆栈展开时,那个 Tester 被构造然后被破坏,或者不是?
至少我希望如此,但 Tester 的析构函数永远不会被调用!
不可能的 !?!?!?!
这是 Visual Studio 中的错误吗?
我搜索了很多,但甚至在 Stackoverflow 上都没有找到答案。