Mic*_*urr 58
setjmp()/ longjmp()完全颠覆堆栈展开,因此异常处理以及RAII(一般的析构函数).
从标准中的18.7/4"其他运行时支持":
如果任何自动对象将被抛出异常转移控制转移到程序中的另一个(目标)点,那么
longjmp(jbuf, val)在将控制转移到同一(目标)点的抛出点的调用具有未定义的行为.
所以底线是setjmp()/ longjmp()在C++中不能很好地发挥作用.
它不是特定于Linux或gcc; 如果你使用longjmp来保留带有析构函数的自动变量的上下文,setjmp/longjmp和C++不能很好地协同工作.
析构函数不会运行,这可能导致内存泄漏或其他不良行为.
| 归档时间: |
|
| 查看次数: |
12132 次 |
| 最近记录: |