首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++:使用longjmp和setjmp安全吗?

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

Stack Overflow用户
提问于 2009-09-03 21:32:09
回答 2查看 14.6K关注 0票数 46

在linux/gcc上使用C++中的longjmp和setjmp是否安全?

  1. 异常处理(我不使用longjmp/setjmp实现异常处理)。我想知道longjmp/setjmp对标准异常handling)
  2. *this pointer
  3. Signals
  4. Smart指针会产生什么副作用(boost的共享和侵入性pointers)
  5. Anything of,您可以想到.

)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-09-03 21:36:55

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

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

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

因此,底线是setjmp()/longjmp()在C++中发挥得不太好。

票数 65
EN

Stack Overflow用户

发布于 2009-09-04 21:51:42

它并不是特定于Linux或gcc的;setjmp / longjmp和C++不能很好地结合在一起,如果您使用longjmp来离开上下文,其中包含自动变量和析构函数。

析构函数不会运行,这可能会导致内存泄漏或其他不良行为。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1376085

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档