C ++ исключение (std :: bad_alloc) дескриптор в objc ++

0

Как заголовок, исключение исключения в 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.");
}

Но это не сработает. Более того, в obj c++, если нет способа обработать исключение, созданное c++, как мы можем обрабатывать исключения конструкции экземпляра c++, например std :: bad_alloc?

Теги:
exception

2 ответа

0
Лучший ответ

У вас много времени исследуйте, я получаю код:

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 для вашей пользовательской необходимости.

0

Большинство библиотек Objective-C (особенно UIKit) не поддерживают исключения, и их использование категорически не одобряется Apple. Захват исключений в коде Objective-C может привести к различным ошибкам.

Если вы хотите использовать код C++ в своем классе Objective-C, вам нужно использовать Objective- C++, назвав файл .mm вместо .m

  • 0
    .mm и .m with compile as ObjC-C++ оба в порядке. Но если исключение конструкции C ++, такое как std :: bad_alloc (), не может быть обработано, что-то вроде RAII скучно и безобразно, или я должен установить границу между этими языками.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню