我在 main 函数的堆栈上有一些对象:
int main(...)
{
CFoo foo;
CBar bar;
}
此外,我还有一个功能可以跟踪我的应用程序中的错误:
void Err(std::string msg)
{
SomehowLogErrorMessage(msg);
exit(1);
}
当我必须报告 fatal error 时,Err 函数绝对有用。我只是记录错误并终止应用程序——在出现此类错误后它无法恢复。但是,以“exit()”终止不会调用 foo 和 bar 析构函数——这是我实际期望的一种行为(但这是错误的)。 “中止()”也无济于事。此外,我不能使用异常 在 main() 中捕获它们。有没有其他方法可以实现 Err 函数,从而终止应用程序并正确清理堆栈对象?或者我应该以某种方式重新设计我的错误处理?
谢谢!
附注顺便问一下,我不能向我的主窗口发送 WM_QUIT 消息吗?我不擅长 WinAPI,但我的应用程序是纯 Win32,我的 Err() 函数可以获得主窗口的句柄。会成功吗?
最佳答案
并非没有异常或从 Err 一路向上调用堆栈正常返回。您需要展开堆栈。
关于c++ - 终止应用程序并调用局部对象的析构函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5622433/