我在http://opensource.apple.com/source/objc4/objc4-532.2/runtime/objc-exception.mm看到 Apple 的 Objective-C 运行时使用一些 C++ ABI 函数进行异常处理,例如__cxa_throw
、__cxa_begin_catch
和. 因为 Objective-C 中的异常处理类似于 C++ 中的异常处理(甚至 C++ 个性例程对于 Obj-C 也是相同的),所以只需要进行一些调整即可在 Objective-C 运行时库中使用这些函数。__cxa_end_catch
__cxa_rethrow
所以,我的观点是,运行时团队“不需要”或者它“不能”(也许是为了保持与 C++ 的兼容性,对于 Objective-C++)实现自己的 ABI(例如,通过使用 Unwind 库,就像 C++ ABI 一样)? 像objc_exception_throw
,objc_exception_rethrow
和objc_begin_catch
之类的函数objc_end_catch
是否必须处理 C++ 对象,以便它们不仅可以,而且必须在底层使用,__cxa_throw
和,就像它们实际做的那样?__cxa_rethrow
__cxa_begin_catch
__cxa_end_catch