C++:使用 longjmp 和 setjmp 安全吗?
- 2024-10-22 08:29:00
- admin 原创
- 235
问题描述:
就以下内容而言,在 linux/gcc 上的 C++ 中使用 longjmp 和 setjmp 是否安全?
异常处理(我没有使用 longjmp/setjmp 实现异常处理。我想知道 longjmp/setjmp 对标准异常处理会产生什么副作用)
*this
指针信号
智能指针(boost 的共享指针和侵入指针)
您还能想到的任何其他事情。
解决方案 1:
setjmp()
/longjmp()
完全颠覆堆栈展开,从而颠覆异常处理以及 RAII(一般为析构函数)。
从标准中的 18.7/4“其他运行时支持”开始:
如果任何自动对象因将控制权转移到程序中的另一个点(目标)而引发的异常而被破坏,则在
longjmp(jbuf, val)
引发点处对将控制权转移到同一点(目标)的调用具有未定义的行为。
因此底线是setjmp()
/longjmp()
在 C++ 中不能很好地运行。
解决方案 2:
它并不特定于 Linux 或 gcc;如果您使用 longjmp 离开具有带析构函数的自动变量的上下文,则 setjmp / longjmp 和 C++ 不能很好地协同工作。
析构函数不会运行,这可能会导致内存泄漏或其他不良行为。
相关推荐
热门文章
项目管理软件有哪些?
热门标签
曾咪二维码
扫码咨询,免费领取项目管理大礼包!
云禅道AD