在抛出异常后调用栈内存对象的析构函数,在C++标准里有规定
正是因为 stack unwinding 的保证作为基础,才有了我们所熟知的 RAII 技术。
另外可以注意到,如果在 stack unwinding 期间抛出异常呢?就只能调用 std::terminate
【 在 ylh1969 的大作中提到: 】
说得好,但是有一个不解。
如果异常跳出了好几层函数,中间层new出的对象,是否都能析构呢?
如果都自动析构,如果抛的信息含有这些内容呢?
【 在 e729 的大作中提到: 】
: 你的思维,还局限在c的面向过程,而cpp是面向对象编程,异常作为一个对象,可以携带更多的信息。(当然,也允许只抛出一个整数或者字符串)
: 在编码的层次上,返回值可以被忽略,而抛出的异常则不可,这减少了提交给用户的产品出错的概率
: 一个函数(或者模块)抛出了一个异常,处理这个异常的代码可以调用栈中的几级以外,就是说,这期间众多的调用过程,根本无需处理异常,而你的‘返回值机制’呢?
: ...................
--
修改:ABCDEFGHJKLM FROM 114.253.35.*
FROM 114.253.35.*