2012-04-25 1 views
2

このようなことは安全ですか?Xのエラーハンドラが例外をスローするのは安全ですか?

私はどんなトラブルにも遭遇しませんか?

+0

Xlibを知らなくても、私はC++の例外とXlibのエラーがかなり直交していると思います。例外をキャッチし、リソースが適切にクリーンアップされることを保証するならば、これは安全でなければなりません。 –

+0

絶対に安全ではありません。 C++の例外をCコードで投げることはできません。 –

+2

@ n.m。回答を投稿する何故なの? – Pubby

答えて

3

X11エラーハンドラは、Xlibがユーザから提供しコールバックするコールバックです。エラーハンドラからスローされた例外は、Xlibコードを介してXlib(通常はXNextEventまたはフレンド)を呼び出すユーザコードに伝播します。

   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には自動デストラクタはありません!

関連する問題