Итак, в основном у меня есть этот простой код оболочки для внешней библиотеки C, и я новичок с точки зрения правильной обработки исключений.
Заранее: код показывает одну и ту же проблему два раза, но, возможно, для версии класса есть другое решение.
#include <some_c_lib>
void setup(){
//some setup code
//init function from the C library
//with C-style return code for error handling
if(!init()){
//error: program should terminate
//because error cannot be handled
}
//some setup code
}
class myclass{
//some members
public:
myclass(){
//some construction code
//create function of the C library
//with C-style return code error handling
if(!create()){
//error: program should terminate
//because error cannot be handled
}
}
~myclass(){
//desturction code
}
};
int main(){
std::ostream log("log.txt"); //logfile as an example
setup();
myclass obj;
while(everything_is_fine()){
//main loop stuff
}
}
Проблема в том, что я не знаю, как лучше завершить программу. Я не хочу ловить исключение в main
. Это было бы бессмысленно и некрасиво, потому что исключение все равно нельзя обработать. Тем не менее, я хотел бы иметь какой-то механизм раскручивания стека. Если я просто exit
запишу программу внутри if
блоков, то файл журнала, например, не будет уничтожен должным образом. Я прав?
Закроется ли файл, если я брошу внутрь
if
, но нигде не предоставлю блок try-catch?Как бороться с исключениями, возникающими в конструкторах?
Есть ли лучший способ справиться с этим типом проблемы?
Надеюсь стало понятно в чем моя проблема.
Спасибо за ответы, хорошего дня или вечера.