c++ - X 的错误处理程序抛出异常是否安全?

标签 c++ x11 xlib

这样做安全吗?

int foo(Display*, XErrorEvent*) {
  throw 0;
}
XSetErrorHandler(foo);

我不会遇到任何麻烦吗?

最佳答案

X11 错误处理程序是由用户提供并由 Xlib 调用的回调。错误处理程序抛出的任何异常都将通过 Xlib 代码传播到调用 Xlib 的用户代码(通常是 XNextEvent 或 friend )。

               foo() <C++>
                 |
       [error is detected by Xlib] <C>
                 |
          [some more Xlib code] <C>
                 |
            [some Xlib code] <C>
                 |
             XNextEvent()  <C>                 
                 |
               main() <C++>

由于 Xlib 不是用 C++ 编写的,C++ 运行时不一定知道如何对 Xlib 代码进行堆栈展开。即使纯粹是运气好能够正确展开,资源(例如 Xlib 在调用错误处理程序之前分配的内存)也可能会丢失。 C 中没有自动析构函数!

关于c++ - X 的错误处理程序抛出异常是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10318363/

相关文章:

c++ - 解析树中的一元和二元减法

c++ - 如何使用 PKCS 11 创建证书对象

c++ - 我如何在不放置 '#include' 语句的情况下访问 cpp 标准库?

linux - GLX 视觉和 FBconfig 之间有什么区别?

node.js - 列出使用 node-x11 库打开的 X Server 窗口?

c++ - 将 LPSTR 转换为 LPCTSTR

c++ - X11 中点击事件的全局鼠标钩子(Hook)

linux - 如何检查哪个程序在 gnome-terminal 中运行

linux - 如何将图像配置为主题中的按钮

c - X11模态对话框