这样做安全吗?
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/