当前位置: 首页 > 面试题库 >

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

鱼意远
2023-03-14
问题内容

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

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

问题答案:

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

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

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

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



 类似资料:
  • 问题内容: 调用longjmp()后,如果自setjmp()调用以来其值可能已更改,则不应访问非非易失性合格的本地对象。在这种情况下,它们的值被认为是不确定的,访问它们是未定义的行为。 现在我的问题是,为什么在这种情况下volatile起作用?难道那个可变变量仍然不能使longjmp失败吗?例如,在下面的示例中,longjmp将如何正常工作?当代码在longjmp之后返回到setjmp时,loca

  • 问题内容: 能后可重复使用被称为? 这play.golang.org/p/QLsvA-b4Ae按预期运行,但它保证是安全的吗?文档没有这么说,但也许我只是偏执。 问题答案: 是的,这很安全。实际上,它比这更安全。您可以同时从多个goroutine中进行选择,并可以根据您的用例进行适当的互换和调用。只要发生在之前,您就应该是安全的。 出于好奇,现在使用互斥锁,两个int32s计数器和一个信号量来实现

  • 我们的许多代码是遗留的,但我们正在向“大数据”后端移动,我试图传播更新的API调用,鼓励使用最新的Spring库等。我们的问题之一是应用程序层ID生成。出于我不明白的原因,一个更高的权威想要序列的biginteger。我本可以在失败的插入中使用重新生成和重新尝试使它们随机,但我确实被否决了。 附言。我仍然认为我的随机生成的想法比处理所有这些线程的东西要好。大整数是一个大得离谱的数字,两次生成相同的

  • 关于一次从多个线程访问局部变量的几个问题: > < li> 我有多个线程写入和读取变量值,我是否应该同步访问它? 变量每隔几秒钟从 Thread1 更新一次,每隔几秒钟从 Thread2 读取和更新到数据库。 如果我没有任何逻辑并且没有任何并发问题,会出现哪些问题? 我应该为此使用volatile吗? 编辑: 我想强调的是,我没有任何并发问题。这是我的具体方案: 一个。我的变量名称是 ,它测量 p

  • 问题内容: 我想标题很清楚我要问的内容。我创建了这个小提琴:http : //jsfiddle.net/Sourabh_/HB7LU/13142/ 在小提琴中,我试图复制一个场景。这只是一个示例,但是在AJAX调用中,如果我不使用该列表,则不会更新。我想知道每次进行AJAX调用来更新列表时是否可以安全使用?是否可以使用其他机制? 我编写的用于复制场景的代码(与小提琴相同): 的HTML JS 问题

  • 我一直在思考jvm安全的工作方式。原则是,jvm始终信任并运行任何本地代码。因此,从概念上讲,如果您的代码没有显式或隐式调用<code>checkpermission(permission)</code>,这意味着它永远不会失败任何安全验证。当然,所有这些验证调用通常都是在JavaAPI类中完成的,因此我们不需要为内置权限调用它们。 现在,只要您使用内置类(如<code>FileOutputStr