关于以下方面,在Linux / gcc上的C ++中使用longjmp和setjmp是否安全?
*this
setjmp()/ longjmp()完全颠覆了堆栈展开,因此也破坏了异常处理以及RAII(通常是析构函数)。
setjmp()
longjmp()
从标准的18.7 / 4“其他运行时支持”开始:
如果将引发控制权转移到程序中另一个(目标)点的抛出异常将破坏任何自动对象,则longjmp(jbuf, val)在将控制权转移到同一(目标)点的抛出点上的调用具有未定义的行为。
longjmp(jbuf, val)
因此,最重要的是setjmp()/ longjmp()在C ++中不能很好地发挥作用。