[英]c++ exception(std::bad_alloc) handle in objc++
作為標題,在c ++中引發異常:
class TestCpp
{
public:
TestCpp (){
NSLog(@"TestCpp init.");
throw "simple exception."; // or throw std::bad_alloc();
}
~TestCpp(){
NSLog(@"TestCpp fini.");
}
};
並像這樣捕獲它:
@try{
TestCpp o;
}
@catch(NSException* ex) {
NSLog(@"exception: %@", ex.reason);
}
@catch(...){
NSLog(@"unknown exception.");
}
但這行不通。 而且,在objc ++中,如果沒有辦法處理C ++引發的異常,我們如何處理C ++實例構造異常,如std :: bad_alloc?
大多數Objective-C庫(特別是UIKit)都不支持異常,Apple強烈建議不要使用它們。 在Objective-C代碼中捕獲異常可能導致各種錯誤。
如果要在Objective-C類中使用C ++代碼,則必須通過命名文件.mm
而不是.m
來使用Objective-C ++。
經過很長時間的調查,我得到了一些代碼:
Type* obj_ptr = new (std::nothrow) Type;
if(obj_ptr==nullptr) {
@throw NSMallocException;
}
......
這樣,一切正常。 因為NSMallocException已初始化為進程啟動。 其他一些資源獲取失敗可以按以下方式處理:
Resource* resource_handle = acquire(Resource);
if(resource_handle==nullptr) {
@throw NSXxxGenericException;
}
......
或者,您可以根據自己的需要初始化一些特殊的NSXxxException。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.