终止应用程序并调用本地对象的析构函数

Sad*_*ido 8 c++ windows stack destructor exit

我在main函数的堆栈中有一些对象:

int main(...)
{
   CFoo foo;
   CBar bar;
}
Run Code Online (Sandbox Code Playgroud)

另外,我有一个函数,可以跟踪我的应用程序中的错误:

void Err(std::string msg)
{
   SomehowLogErrorMessage(msg);
   exit(1);
}
Run Code Online (Sandbox Code Playgroud)

当我必须报告致命错误时,Err函数绝对有用.我只是记录错误并终止应用程序 - 在发生此类错误后无法恢复.但是,以"exit()"结尾不会调用foo和bar析构函数 - 这是我实际预期的行为(但是错误)."abort()"也无济于事.另外,我不能在main()中使用异常来捕获它们.有没有其他方法来实现Err函数,它终止应用程序并正确清理堆栈对象?或者我应该以某种方式重新设计我的错误处理?

谢谢!


ps顺便说一句,我不能将WM_QUIT消息发送到我的主窗口?我对WinAPI并不擅长,但我的应用程序是纯Win32,而我的Err()函数可以获得我的主窗口的句柄.它会起作用吗?

Log*_*ldo 3

并非没有异常,或者从 Err 一直正常返回到调用堆栈。您需要展开堆栈。