objective-C或ObjectiveC++能处理C++异常吗

Can objective-C or Objective C++ handle C++ exceptions?

本文关键字:C++ 异常 处理 ObjectiveC++ objective-C      更新时间:2023-10-16

我有一个用于网络通信的C++库,我需要为Mac端口,以前这个库在Windows C++应用程序上使用。

C++网络库的流是基于出错时的异常,而不是返回错误代码或最后一个错误。。

现在,在Mac上,我们将Objective-C/C++用于应用程序。我需要在Objective-C/C++中有UI,但用于核心网络功能的库是相同的C++库。

所以我的问题是,目标C是否能够处理C++调用引发的异常?如果是,怎么做?如果没有,我该如何解决?还是我们围绕C++Lib调用编写一个包装器,并使用异常和返回错误代码?

请告知,如何解决它。

如果您使用的是iOS或OS X上的64位运行时,一切都很正常。您可以编写一个C++风格的try/catch,它将按预期工作,@try/@catch也是如此。注意,对于Objective-C和C++异常,您仍然有两种不同的样式;唯一的统一是catch(...)@catch(...)捕获所有异常、Objective-C或C++的特殊情况。这对于集中清理代码来说用处不大,但对于异常本身,您所能做的就是再次盲目抛出它。

但在任何情况下,Objective-C(或Objective-C++)程序中的流控制都不应该使用异常。当C++异常退出有问题的库时,您确实应该努力捕获它们,并将它们转换为更合适的机制,例如NSError。特别是,避免让它们中的任何一个通过任何苹果或第三方框架提出-大多数这样的框架对于Objective-C异常都不是异常安全的,更不用说C++异常了,因此后果是不明确的(主要是围绕内存泄漏,尽管还有许多其他故障)。