C++:使用 longjmp 和 setjmp 安全吗?
- 2024-10-22 08:29:00
- admin 原创
- 57
问题描述:
就以下内容而言,在 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++ 不能很好地协同工作。
析构函数不会运行,这可能会导致内存泄漏或其他不良行为。
相关推荐
热门文章
项目管理软件有哪些?
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件
热门标签
云禅道AD