http://opensource.apple.com/source/objc4/objc4-532.2/runtime/objc-exception.mmで、Apple の Objective-C ランタイムが__cxa_throw
、__cxa_begin_catch
、__cxa_end_catch
などの例外処理にいくつかの C++ ABI 関数を使用していることを見ました__cxa_rethrow
。Objective-C での例外処理は C++ での例外処理と似ているため (C++ のパーソナリティ ルーチンでさえ Obj-C と同じです)、Objective-C ランタイム ライブラリでこれらの関数を使用するには、いくつかの調整のみが必要です。
したがって、私のポイントは、ランタイム チームが「必要ない」または「できない」(おそらく、Objective-C++ の場合、C++ との互換性を維持するため) 独自の ABI を実装する (たとえば、C++ ABI のように Unwind ライブラリを使用することによって) ということです。 )? objc_exception_throw
、objc_exception_rethrow
、 のobjc_begin_catch
ような関数は、C++ オブジェクトを処理する必要があるので、実際に行うように、、、およびを内部でobjc_end_catch
使用できるようにするだけでなく、使用する必要がありますか?__cxa_throw
__cxa_rethrow
__cxa_begin_catch
__cxa_end_catch