18 Aralık 2015 Cuma

std::set_terminate

Eğer yakalanmamış exception'lar varsa ve de temizlik yaparak uygulamadan çıkmak istiyorsak aşağıdaki gibi bir yöntem izleyebiliriz.
terminate_handler old_terminate_handler = nullptr;

void new_terminate_handler() {
    std::cerr << "terminate due to error" << std::endl;
    if( old_terminate_handler != nullptr ) {
        old_terminate_handler();
    } else {
        exit (-1);
    }
}

int main(int, char**) {
    old_terminate_handler = get_terminate();
    set_terminate(new_terminate_handler);
}
std::set_terminate() metodu ile yakalanmamış exceptionları kendimiz yakalar ve std::exit() metodunu çağırırsak, programımız düzgün bir şekilde çıkar. Hem static destructorlar işletilir, hem de std::atexit() metodu ile atanan metotlar çağırılır ve de en önemlisi I/O streamleri boşaltılır (flush) .



Hiç yorum yok:

Yorum Gönder