在linux/gcc上使用C++中的longjmp和setjmp是否安全?
*this pointer)。
发布于 2009-09-03 21:36:55
setjmp()/longjmp()完全颠覆了堆栈的展开,因此也破坏了异常处理以及RAII (一般是析构函数)。
从标准中的18.7/4“其他运行时支持”开始:
如果任何自动对象都会被抛出的异常销毁,将控制转移到程序中的另一个(目标)点,那么在将控制权转移到同一(目标)点的抛出点上对
longjmp(jbuf, val)的调用具有未定义的行为。
因此,底线是setjmp()/longjmp()在C++中发挥得不太好。
发布于 2009-09-04 21:51:42
它并不是特定于Linux或gcc的;setjmp / longjmp和C++不能很好地结合在一起,如果您使用longjmp来离开上下文,其中包含自动变量和析构函数。
析构函数不会运行,这可能会导致内存泄漏或其他不良行为。
https://stackoverflow.com/questions/1376085
复制相似问题