小编Nev*_*ore的帖子

为什么只有处理异常才能保证堆栈展开?

C++ 标准说([except.handle]/9):

如果找不到匹配的处理程序,则调用函数std :: terminate(); 在对std :: terminate()的调用是否为实现定义之前,是否展开堆栈

例如,下面的代码行为(是否打印S::~S())是实现定义的:

struct S {
    S() { std::cout << "S::S()" << std::endl; }
    ~S() { std::cout << "S::~S()" << std::endl; }
};

int main() {
    S s;
    throw std::runtime_error("exception");
}
Run Code Online (Sandbox Code Playgroud)

我想深入了解:为什么要定义实现?std::terminate()如果异常未被捕获(与try{ ... } catch(...) { throw; }顶级函数类似),为什么在调用异常之前,为什么上下文不能被取消?一目了然,这种行为与RAII的一致性更加清晰和安全.

c++ exception

9
推荐指数
1
解决办法
531
查看次数

标签 统计

c++ ×1

exception ×1