C中抛出异常的生命周期
发布时间:2020-12-16 10:10:25 所属栏目:百科 来源:网络整理
导读:请考虑以下简单的C代码: void foo() { throw(my_exception());}void check_exc(const my_exception exc) { /* Do stuff with exc */}void bar() { try { foo(); } catch(const my_exception exc) { check_exc(exc); }} 在bar的异常处理程序中,exc引用的异常
请考虑以下简单的C代码:
void foo() { throw(my_exception()); } void check_exc(const my_exception &exc) { /* Do stuff with exc */ } void bar() { try { foo(); } catch(const my_exception &exc) { check_exc(exc); } } 在bar的异常处理程序中,exc引用的异常如何仍然存在,看看它是如何在foo的堆栈帧中分配的?在异常处理程序运行时,该帧是否应该被解除,并且在那里分配的任何值都已经被认为是死的?特别是因为我明确地调用了另一个需要堆栈空间的函数. 作为一名试图学习C的C程序员,我在这里误解了什么?这些不同的值实际上存在于内存中,更确切地说是什么? 解决方法
在throw-expression中创建的临时用于初始化异常对象本身,(引用标准)“以未指定的方式分配”.该对象(至少)持续到处理异常为止,因此处理程序对它的引用在处理程序或从处理程序调用的任何函数中都是有效的.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |