Как заголовок, исключение исключения в 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?
У вас много времени исследуйте, я получаю код:
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 для вашей пользовательской необходимости.
Большинство библиотек Objective-C (особенно UIKit) не поддерживают исключения, и их использование категорически не одобряется Apple. Захват исключений в коде Objective-C может привести к различным ошибкам.
Если вы хотите использовать код C++ в своем классе Objective-C, вам нужно использовать Objective- C++, назвав файл .mm
вместо .m
.mm
и.m with compile as ObjC-C++
оба в порядке. Но если исключение конструкции C ++, такое как std :: bad_alloc (), не может быть обработано, что-то вроде RAII скучно и безобразно, или я должен установить границу между этими языками.