簡體   English   中英

objc ++中的c ++異常(std :: bad_alloc)處理

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM