Joh*_*itb 13 c++ exception abi language-lawyer longjmp
我有这样的代码如下
try {
doSomething();
} catch(InterruptException) {
goto rewind_code;
}
if(0) {
rewind_code:
longjmp(savepoint, 1);
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,当我goto离开catch块时,C++运行时存储的异常对象是免费的吗?或者运行时是否允许缓存它,直到周围的函数存在或类似的东西?我只是想确保如果我多次执行上面的代码,每次采用倒带代码,我都不会泄漏内存(因为longjmp不会执行编译器在函数序列之前或之前发出的清理代码).
Jer*_*fin 11
6.6节/ 2:
从范围退出(无论多么完成)时,将为具有自动存储持续时间的所有构造对象调用析构函数(12.4)...
至少在我读到它的时候,"无论多么成就"应该/确实包括一个goto.
编辑:好的,根据约翰内斯的评论,我们关心的是§15.1/ 4:
当为异常执行的最后一个处理程序以throw以外的任何方式退出时; 临时对象被销毁,实现可能会释放临时对象的内存;
[...]
在销毁处理程序中的exception-declaration中声明的对象后立即发生破坏.
| 归档时间: |
|
| 查看次数: |
679 次 |
| 最近记录: |