小编典典

C ++:可以安全使用longjmp和setjmp吗?

linux

关于以下方面,在Linux / gcc上的C ++中使用longjmp和setjmp是否安全?

  1. 异常处理(我没有使用longjmp / setjmp实现异常处理。我想知道longjmp / setjmp对标准异常处理有哪些副作用)
  2. *this 指针
  3. 讯号
  4. 智能指针(boost的共享和侵入指针)
  5. 您还能想到的其他任何东西。

阅读 272

收藏
2020-06-02

共1个答案

小编典典

setjmp()/
longjmp()完全颠覆了堆栈展开,因此也破坏了异常处理以及RAII(通常是析构函数)。

从标准的18.7 / 4“其他运行时支持”开始:

如果将引发控制权转移到程序中另一个(目标)点的抛出异常将破坏任何自动对象,则longjmp(jbuf, val)在将控制权转移到同一(目标)点的抛出点上的调用具有未定义的行为。

因此,最重要的是setjmp()/ longjmp()在C ++中不能很好地发挥作用。

2020-06-02