c++ - 终止应用程序并调用局部对象的析构函数

标签 c++ windows stack destructor exit

我在 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/

相关文章:

c++ - (C++) 为什么静态成员在初始化之前可以使用?

Javascript 只接收一次 ActiveX 事件

windows - VLC 2.1.5 (win64) 不支持 TLS?

在函数内部更改堆栈上的结构

c - C 中类型数组的堆栈占用空间

c++ - 打开路径名中带有波浪号 (~) 的 ofstream

c++ - QSize 与使用 2 Int 有常量

c++ - 如何从类似函数调用具有可变数量参数的函数?

c++ - MinGW: "gcc is not recognized as an internal or external command"

collections - 有没有办法在 Rust 中使用堆栈上的集合?